n²谁都会打,不说了。

这里讨论一下nlogn算法(单调不减):

首先开始考虑单调性,我习惯性的以为是单调队列/栈优化的那个套路,想要找到一个跟下标有关的单调性却发现没有。

例如:我想过当下标增加时f[i]增加,后来发现了反例:1 3 4 2

事实上也没有别的想得到的了。

我跑去看题解,发现单调性是这个毒瘤:

当单调不减子序列长度增加时,每个长度对应的最小高度增加。

然后每次二分出一个长度,保证最小高度刚好不大于a[i]

然后用a[i]更新f[i]的最小高度...

然后就没啥难点了,A了。

 #include <cstdio>
#include <algorithm>
#include <cstring> const int N = ; int a[N], f[N], p[N], top; inline int BS(int x) {
int l = , r = top, mid;
while(l < r) {
mid = (l + r + ) >> ;
if(p[mid] < x) {
r = mid - ;
}
else {
l = mid;
}
}
return r;
} inline int BS2(int x) {
int l = , r = top, mid;
while(l < r) {
mid = (l + r + ) >> ;
if(p[mid] >= x) {
r = mid - ;
}
else {
l = mid;
}
}
return r;
} int main() {
int n = , x;
while(scanf("%d", &x) != -) {
a[++n] = x;
}
for(int i = ; i <= n; i++) {
int t = BS(a[i]);
f[i] = t + ;
p[f[i]] = std::max(p[f[i]], a[i]);
top = std::max(top, f[i]);
}
printf("%d \n", top);
top = ;
memset(p, 0x7f, sizeof(p));
for(int i = ; i <= n; i++) {
int t = BS2(a[i]);
f[i] = t + ;
p[f[i]] = std::min(p[f[i]], a[i]);
top = std::max(top, f[i]);
}
printf("%d", top);
return ;
}

AC代码

附一张提交记录

洛谷P1020 导弹拦截的更多相关文章

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

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

  2. 洛谷 P1020导弹拦截题解

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

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

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

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

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

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

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

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

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

  7. 洛谷 - P1020 - 导弹拦截 - 最长上升子序列

    https://www.luogu.org/problemnew/show/P1020 终于搞明白了.根据某定理,最少需要的防御系统的数量就是最长上升子序列的数量. 呵呵手写二分果然功能很多,想清楚自 ...

  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. C# Note29: Close()和Dispose()的区别

    待更! 深入解析Close()和Dispose()的区别

  2. python之路--BOM和DOM

    一. 介绍 之前学的JS的一些简单的语法并没有和浏览器有任何的交互. 我们要想制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DOM相关知识. JavaScript 分为 ECMAScr ...

  3. mobile adaptor & css media query

    mobile adaptor & css media query 移动端适配 & 媒体查询 http://cssmediaqueries.com/ device-aspect-rati ...

  4. Ubuntu16.04 启动纯文本界面方法

    问题: Ubuntu16.04 如何启动纯文本界面. 解决方法: 1.系统启动后,在登陆界面点击Ctrl+Shift+F1切换到文本登陆界面: 2.修改为默认从文本界面登陆: sudo vi /etc ...

  5. 循环神经网络RNN及LSTM

    一.循环神经网络RNN RNN综述 https://juejin.im/entry/5b97e36cf265da0aa81be239 RNN中为什么要采用tanh而不是ReLu作为激活函数?  htt ...

  6. caffe2学习

    https://www.jianshu.com/p/50bf3bd4e3d0 知乎专栏 https://zhuanlan.zhihu.com/kingbob

  7. .resx文件与.cs文件的自动匹配

    图中myCommands.Resx是<DependentUpon> myCommands.cs文件的. 如何为其他的.cs文件添加类似的资源文件呢? 其实挺简单, 添加与.cs文件同名的资 ...

  8. Xml文件汉化后改变代码页

    源Xml文件代码页为ansi,汉化后要转换为UTF-8,在网上搜素了以下结果,但解释的不都清楚,我找了好一阵才找到相应的操作.   为防止自己以后忘了,补充如下: 经过这样的设置,生成的汉化xml文件 ...

  9. POJ1860-Currency Exchange-判正环

    两种货币的交换可以当成两条边,建图后跑Bellman_ford算法就好了. Bellman_ford算法可以用来处理负边权,所以可以判断是否存在负环.反过来就可以判断是否存在正环. /*------- ...

  10. xml 模块

    XML ———可扩展的标记语言 也是一种通用的数据格式 之所以用它 也是因为跨平台 XML 的语法格式: 1,任何的起始标签都必须有一个结束标签. <> 起始标签 </>结束标 ...