导弹拦截 dp
n∗lognn*lognn∗logn写法,lis[i]的意义为:所有最长上升子序列长度为i的位置上的最小a数组元素值lis[i]的意义为:所有最长上升子序列长度为i的位置上的最小a数组元素值lis[i]的意义为:所有最长上升子序列长度为i的位置上的最小a数组元素值。然后转移一下即可。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mp make_pair
#define pb push_back
using namespace std;
LL gcd(LL a,LL b){return b?gcd(b,a%b):a;}
LL lcm(LL a,LL b){return a/gcd(a,b)*b;}
LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
int n;
const int N=1e5+43;
int dp[N],lis[N],a[N];
int b[N];
int main(){
	ios::sync_with_stdio(false);
	int q;
	while(cin>>q)a[++n]=q;
	// cout<<n<<endl;
	for(int i=1;i<=n;i++)dp[i]=1,lis[i]=2e9,b[n-i+1]=a[i];
	for(int i=1;i<=n;i++){
		int pos=upper_bound(lis+1,lis+1+n,a[i])-lis;
		while(lis[pos]>=a[i])pos--;
		dp[i]=pos+1;
		lis[dp[i]]=min(lis[dp[i]],a[i]);
	}
	int ans1=*max_element(dp+1,dp+1+n);
	for(int i=1;i<=n;i++)a[i]=b[i];
	for(int i=1;i<=n;i++)lis[i]=2e9;
	memset(dp,1,sizeof dp);
	for(int i=1;i<=n;i++){
		int pos=upper_bound(lis+1,lis+1+n,a[i])-lis;
		dp[i]=pos;
		lis[dp[i]]=min(lis[dp[i]],a[i]);
	}
	cout<<*max_element(dp+1,dp+1+n)<<endl;
	cout<<ans1<<endl;
	return 0;
}
// 12
// 6```
												
											导弹拦截 dp的更多相关文章
- 洛谷 P1020 导弹拦截(dp+最长上升子序列变形)
		
传送门:Problem 1020 https://www.cnblogs.com/violet-acmer/p/9852294.html 讲解此题前,先谈谈何为最长上升子序列,以及求法: 一.相关概念 ...
 - P1020 导弹拦截  dp  树状数组维护最长升序列
		
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
 - UESTC 2015dp专题 N 导弹拦截 dp
		
导弹拦截 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/65 Descrip ...
 - 【BZOJ2044】三维导弹拦截 DP+(有上下界的)网络流
		
[BZOJ2044]三维导弹拦截 Description 一场战争正在A国与B国之间如火如荼的展开. B国凭借其强大的经济实力开发出了无数的远程攻击导弹,B国的领导人希望,通过这些导弹直接毁灭A国的指 ...
 - 【bzoj2044】三维导弹拦截  dp+二分图最大匹配
		
题目描述 n个物品,第i个位置有ai.bi.ci三种属性.每次可以选出满足$\ a_{p_i}<a_{p_{i+1}}\ ,\ b_{p_i}<b_{p_{i+1}}\ ,\ c_{p_i ...
 - P1020 导弹拦截 /// DP Dilworth定理 LIS、LDS优化
		
题目大意: https://www.luogu.org/problemnew/show/P1020 Dliworth有两个互相对偶的定理:U的链划分使用的最少集合数,等于它的最大反链长度.(1)U的反 ...
 - 导弹拦截问题(DP+贪心)
		
1. 拦截导弹(Noip1999) 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度. ...
 - 洛谷 1020:导弹拦截(DP,LIS)
		
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
 - DP———7.导弹拦截(emmm冷静分析一波也不叫DP吧,不过有一种DP的方法写)
		
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
 
随机推荐
- Django(十二)—关于查询知识点总结
			
https://www.cnblogs.com/haiyan123/p/7763710.html models.Book.objects.filter(**kwargs): querySet ...
 - Python基础-元组、列表、字典
			
元组tuple 元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组.例:(1,2,3)("a","b","c&q ...
 - R语言:提取路径中的文件名字符串(basename函数)
			
假设存在路径C:/coverage/Homo_sapiens.sort.add_exon1_coverage.txt,欲提取Homo_sapiens.sort.add_exon1_coverage.t ...
 - 将分支代码合并到master和将master代码合并到dev
			
两种合并分支的方法: 都保证在合到的那个分支上面:A合并到B,即保证当前在B分支上. A merge B是把A中的改动放到B分支上,B merge A是把B中的改动merge到A中,例如把master ...
 - BZOJ4653 尺取法 + 线段树
			
https://www.lydsy.com/JudgeOnline/problem.php?id=4653 首先很容易想到离散之后排序,用线段树或者树状数组去维护. 问题在于按照什么排序,如果按照左端 ...
 - 剑指Offer_编程题_16
			
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. /* struct ListNode { int val; struct ListNode *n ...
 - linux对4T硬盘进行分区
			
使用parted工具: yum install parted parted /dev/sdb //选择硬盘 GNUParted 2.3Using /dev/sdbWelcome to GNU Part ...
 - mysql 快速生成删除数据库中所有的表的语句
			
SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE table_s ...
 - Visual Studio连接到TFS
			
我在学校自己使用git,公司使用VSS,然后这个项目又使用TFS.Visual Studio连接到TFS是这样滴 1.点连接到团队项目 2.添加TFS服务器的url,写到你的http:XXX/tfs就 ...
 - vue实现筛选功能,文字选中变色
			
<template> <Poptip trigger="hover" title="Title" content="content& ...