N - 导弹拦截

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都要高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹,同时,司令部想知道拦截下来的导弹的高度。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。

Input

第一行是一个整数t,代表case数。 对于每一个case,第一行是一个整数n(1≤n≤100000); 第二行是n个非负整数,表示第n枚导弹的高度,按来袭导弹的袭击时间顺序给出,以空格分隔。数据保证高度不会超过100000.

Output

求LIS

n^2的方法:d[i]=max(d[j],0)+1;i>j,a[i]>a[j]。d[i]表示以a[i]结尾的最长子序列。
nlogn的方法:dp[l]表示长度为l的最小结尾;同样长度,结尾越小越好。
用dp[i]的单调性把查找时间复杂度降为了logn,要打印路径就用一个数组pre[i]记录跟新dp前a[i]前一个数的下标。

#include<cstdio>
#include<memory.h>
const int MAXN=1e5+; int dp[MAXN];//dp[i]表示长度为i的最小结尾
int id[MAXN];
int a[MAXN];
int pre[MAXN]; int find(int *a,int len,int n) //返回p+1 a[p]<n<=a[p+1]
{
int lo=,hi=len;
int mid;
while(hi-lo-){
mid=(lo+hi)>>;
if(n>a[mid]){
if(n<=a[mid+])return mid+;
else lo=mid+;
}
else hi=mid;
}
return hi;
}
int main()
{
// const int INF=10000;
int T,i,n,len,pos;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=;i<n;i++)
scanf("%d",a+i);
len=;
dp[]=-;
dp[len]=a[];
id[len]=;
id[]=-;
pre[]=-;
for(i=;i<n;i++)
{
if(a[i]>dp[len]){
pre[i]=id[len];
dp[++len]=a[i];
id[len]=i;
}
else{
pos=find(dp,len,a[i]);
pre[i]=id[pos-];
id[pos]=i;
dp[pos]=a[i];
}
}
printf("%d\n",len);
i=;
int nid=id[len];
int (&ans)[MAXN]=id;
ans[i]=a[nid];
while(pre[nid]!=-){
nid=pre[nid];
ans[++i]=a[nid];
}
while(i){
printf("%d ",ans[i--]);
}
printf("%d\n",ans[]); }
}

最新文章

  1. Alpha阶段第六次Scrum Meeting
  2. dedecms在首页或列表调取文章内容body的三个方法
  3. C#设置字体(FontDIalog)、颜色(ColorDialog)对话框控件
  4. angularJS 二
  5. redis-集群(cluster)扫盲篇(一)
  6. dubbo 解决Multicast java.net.SocketException: No such device
  7. PowerDesigner 将CDM、PDM导出为图片
  8. 剑指offer—第三章高质量代码(o(1)时间删除链表节点)
  9. Android 4.2原生支持从右到左的文字排列格式
  10. Android Developers:在命令行构建和运行
  11. HDU 4628 多校第三场1008 dp
  12. RSA加密解密(PHP Demo)
  13. 顺序线性表之大整数求和C++
  14. 用react系列技术栈实现的demo整合系统
  15. Struts2入门这一篇就够了
  16. Zabbix 微信报警Python版(带监控项波动图片)
  17. SpringMVC格式转化错误之HTTP Status [400] – [Bad Request]
  18. React 面向组件化编程 - 封装了webpack - npm run build 产生的包的 /static 引用路径问题
  19. 从requests源码分析中学习python(一)
  20. XTU 1261 - Roads - [最小割][2017湘潭邀请赛B题(江苏省赛)]

热门文章

  1. Django 开发拓展 auth 模块,注册用户时发生 ValueError: The given username must be set
  2. Unity ShaderLab 光照随笔
  3. cat命令详解及here doc
  4. express使用post方法
  5. DDD 落地的具体思路
  6. 基础篇-密码文件.pgpass
  7. 密码暴力破解工具acccheck使用
  8. jsp学习与提高(三)——JSP Cookie 处理
  9. JQuery入门一
  10. NET Core 开发环境