博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1020 导弹拦截
阅读量:4363 次
发布时间:2019-06-07

本文共 1777 字,大约阅读时间需要 5 分钟。

题目描述 

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。

输入导弹依次飞来的高度(雷达给出的高度数据是不大于50000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

输入输出格式 

输入格式: 
一行,若干个整数(个数少于100000)

输出格式: 

2行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。

输入输出样例 

输入样例#1: 
389 207 155 300 299 170 158 65 
输出样例#1: 
说明 
复杂度: nlogn

Dilworth定理 

在一个序列中 最长下降子序列的个数就等于其最长不下降子序列的长度

所以呢这题就是求最长不上升子序列长度和最长上升子序列长度

upperbound,lowerbound写法

#include
using namespace std;#define maxn 100005#define inf 0x3f3f3f3fint dp1[maxn],dp2[maxn];int n=0,a[maxn];int len1,len2;int cmp(int x,int y){ return x>y;}int main(){ while(scanf("%d",&a[++n])!=EOF); n--;//处理EOF的那一次 fill(dp2,dp2+n+1,inf); len1=1; len2=1; for(int i=1; i<=n; i++) { int k1=upper_bound(dp1+1,dp1+1+n,a[i],cmp)-dp1; int k2=lower_bound(dp2+1,dp2+1+n,a[i])-dp2; dp1[k1]=a[i]; dp2[k2]=a[i]; len1=max(len1,k1); len2=max(len2,k2); } cout<
<
<

直接二分写

#include
#include
#include
#include
using namespace std;#define maxn 300000+5const int inf=0x3f3f3f3f;int a[maxn];int n=0;int dp1[maxn],dp2[maxn];int len1=0,len2=0;//寻找刚好小于x的下标int pos1(int l,int r, int x){ if(x<=dp1[len1]) return len1=len1+1; while(l < r) { int m = l + (r-l)/2; if(dp1[m] >= x) //千万别写成a[m],脑袋要清晰点 l = m + 1; else r = m; } return r;}//寻找大于等于x的下标int pos2(int l,int r,int x){ if(x>dp2[len2]) return len2=len2+1; while(l
>1); if(dp2[m]

 

转载于:https://www.cnblogs.com/planche/p/8438179.html

你可能感兴趣的文章
maven学习7 settings.xml解析
查看>>
HDFS的设计
查看>>
如何实现一个php框架系列文章【开篇】
查看>>
APIClude常用代码
查看>>
Nginx wordpress rewrite
查看>>
java工具类--数据库操作封装类
查看>>
对PInvoke函数函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。...
查看>>
面向对象之多态的三种方式
查看>>
1:(0or1)
查看>>
最大子数组和(环状数组)
查看>>
Python脚本报错AttributeError: ‘module’ object has no attribute’xxx’解决方法
查看>>
sqlserver数据库索引
查看>>
pytorch 官方文档翻译
查看>>
秒杀多线程第三篇 原子操作 Interlocked系列函数
查看>>
boost之ThreadPool
查看>>
如何打造测试工程师精英团队?
查看>>
Linux(CentOS)下同时启动两个tomcat
查看>>
从B树、B+树、B*树谈到R 树
查看>>
java 转换流 打印流 数据流
查看>>
你知道如何判定一个大整数为素数吗?——米勒拉宾素数判定算法
查看>>