P1020导弹拦截
导弹拦截
前言
依然是前言,依然是因为我的日常摸鱼,导致了我在这道明明十分简单的题上面卡了好久好久好久……
时间可以推及到庙里的老和尚终于在临死之前讲完了故事那么漫长。
我……一个蒟蒻,
终于完成了这道题。
其实名字叫做导弹拦截的题不少,但是我写的这个,谁让它简单呢?
题面描述
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是≤50000$ \le 50000$的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入格式
1行,若干个整数(个数$\le$1000000)
输出格式
2行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入输出样例
输入#1
389 207 155 300 299 170 158
输入#1
6
2
说明/提示
为了让大家更好地测试n方算法,本题开启spj,n方100分,nlogn200分
每点两问,按问给分
题意分析
显然,这道题想让我们求一个最长不上升子序列,和一个最长下降序列。
然后……
好像就没什么了?
\(emmm……\)
分析一下原因吧,因为我确实不想贴代码。
所以说:
原因:
对于最长不上升子序列,显然代表的就是一套系统能够拦截的最大导弹数。
而最长下降子序列,似乎相对有一些难以理解:
但是仔细反应一下其实还是挺好想得。
对于每一套设备,显然我们一定有一个导弹高度小于前一个系统所拦截的导弹的最低高度。
自然而然地,
最长下降子序列。
并且,显然正确。
\(rua\)
然后好像按照这个思路不知不觉就\(O(nlogn)\)了
\((ง •̀_•́)ง\)
大家加油!!!