https://www.luogu.org/problemnew/show/P1020

终于搞明白了。根据某定理,最少需要的防御系统的数量就是最长上升子序列的数量。

呵呵手写二分果然功能很多,想清楚自己要找的是什么就可以了。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll; const int INF=0x3f3f3f3f; int n;
int a[100005];
int dp[50005]; int f1(int *dp,int a){
int l=1,r=n;
while(1){
int m=(l+r)>>1;
if(m==l){
if(dp[l]<a)
return l;
else
return r;
}
if(dp[m]<a){
r=m;
}
else{
l=m+1;
}
}
return -1;
} int f2(int *dp,int a){
int l=1,r=n;
while(1){
int m=(l+r)>>1;
if(m==l){
if(dp[l]>=a)
return l;
else
return r;
}
if(dp[m]>=a){
r=m;
}
else{
l=m+1;
}
}
return -1;
} int main(){
n=0;
int t;
while(~scanf("%d",&t)){
n++;
a[n]=t;
} memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++){
int id=f1(dp,a[i]);
//cout<<"id="<<id<<endl;
dp[id]=a[i];
/*for(int k=1;k<=n;k++){
printf("dp[%d]=%d\n",k,dp[k]);
}*/
}
int ans=n;
for(int i=1;i<=n;i++){
if(dp[i]==0){
ans=i-1;
break;
}
}
printf("%d\n",ans); memset(dp,INF,sizeof(dp));
for(int i=1;i<=n;i++){
int id=f2(dp,a[i]);
//cout<<"id="<<id<<endl;
dp[id]=a[i];
/*for(int k=1;k<=n;k++){
printf("dp[%d]=%d\n",k,dp[k]);
}*/
} ans=n;
for(int i=1;i<=n;i++){
if(dp[i]==INF){
ans=i-1;
break;
}
}
printf("%d\n",ans);
}

洛谷 - P1020 - 导弹拦截 - 最长上升子序列的更多相关文章

  1. codevs1044 拦截导弹==洛谷 P1020 导弹拦截

    P1020 导弹拦截 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天 ...

  2. 洛谷 P1020 导弹拦截(dp+最长上升子序列变形)

    传送门:Problem 1020 https://www.cnblogs.com/violet-acmer/p/9852294.html 讲解此题前,先谈谈何为最长上升子序列,以及求法: 一.相关概念 ...

  3. 【动态规划】【二分】【最长不下降子序列】洛谷 P1020 导弹拦截

    最长不下降子序列的nlogn算法 见 http://www.cnblogs.com/mengxm-lincf/archive/2011/07/12/2104745.html 这题是最长不上升子序列,倒 ...

  4. 洛谷 P1020导弹拦截题解

    洛谷链接:https://www.luogu.org/problem/P1020 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...

  5. 洛谷P1020 导弹拦截【单调栈】

    题目:https://www.luogu.org/problemnew/show/P1020 题意: 给定一些导弹的高度. 一个导弹系统只能拦截高度不增的一系列导弹,问如果只有一个系统最多能拦截多少导 ...

  6. codevs——T1044 拦截导弹 || 洛谷——P1020 导弹拦截

    http://codevs.cn/problem/1044/ || https://www.luogu.org/problem/show?pid=1020#sub 时间限制: 1 s  空间限制: 1 ...

  7. 洛谷P1020导弹拦截——LIS

    题目:https://www.luogu.org/problemnew/show/P1020 主要是第二问,使用了dilworth定理:一个序列中最长不上升子序列的最大覆盖=最长上升子序列长度. di ...

  8. 洛谷P1020 导弹拦截 题解 LIS扩展题 Dilworth定理

    题目链接:https://www.luogu.com.cn/problem/P1020 题目大意: 给你一串数,求: 这串数的最长不上升子序列的长度: 最少划分成多少个子序列是的这些子序列都是不上升子 ...

  9. 洛谷 [P1020] 导弹拦截 (N*logN)

    首先此一眼就能看出来是一个非常基础的最长不下降子序列(LIS),其朴素的 N^2做法很简单,但如何将其优化成为N*logN? 我们不妨换一个思路,维护一个f数组,f[x]表示长度为x的LIS的最大的最 ...

随机推荐

  1. 高性能MySQL(四)

    Schema与数据类型优化 需要优化的数据类型 更小的通常更好 简单就好 尽量避免NULL 整数类型 存储整数,有TINYINT.SMALLINT.MEDIUMINT.INT.BIGINT,分别使用8 ...

  2. MAC如何查看某个端口的占用情况

    执行如下命令: lsof -i tcp:8080 #8080为查询的端口号 会展示该端口的使用情况,然后kill -9 PID的值即可关闭该端口

  3. Java UUID 生成(转载)

    来自:http://www.cnblogs.com/jdonson/archive/2009/07/22/1528466.html 基本原理:GUID是一个128位长的数字,一般用16进制表示.算法的 ...

  4. 使用Primose方式解决异步编程回调的一些问题--animate动画的例子

    function animate(dis, time) { var def = $.Deferred(); $('.boll') .animate({ left: dis + 'px' }, time ...

  5. unity导出android项目

    1. 2 . 3 选择Google Android Project(若不选则直接导出Apk) Export,Android项目即可导出成功.

  6. office web apps的搭建部署(1)(写于2017.12.27)

    因为业务方面的需求,项目要求搭建office-web-apps这个玩意儿,做一个在线预览编辑的功能,为了方便,我下面都用OWA代替这个服务. 首先说一下什么是office-web-apps-serve ...

  7. Photoshop颜色通道实例

    PHOTOSHOP学到这会儿,我们不得不来学学枯燥乏味的颜色理论了,因为如果再不学,就难以学下去了.眼下我们就遇到了难点:颜色通道.前面在初识通道的时候,我已经说过:当你打开一张照片(RGB模式)的时 ...

  8. CSU 1554 SG Value —— 思维

    题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1554 Description The SG value of a set (mult ...

  9. MySQL学习笔记(三)——计算字段及常用函数

    拼接字段-Concat()函数        将值连接在一起构成单个值.注意:大多数DBMS使用+或者||来实现拼接,mysql则使用Concat()函数来实现. 去空格函数-Trim函数       ...

  10. word使用技巧

    word文档左侧显示目录 word2007  选择word的视图,然后选择文档结构图 word中插入当前文档名称或者文档编辑时间 https://stackoverflow.com/questions ...