洛谷P1020 导弹拦截
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 导弹拦截的更多相关文章
- codevs1044 拦截导弹==洛谷 P1020 导弹拦截
P1020 导弹拦截 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天 ...
- 洛谷 P1020导弹拦截题解
洛谷链接:https://www.luogu.org/problem/P1020 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...
- 洛谷 P1020 导弹拦截(dp+最长上升子序列变形)
传送门:Problem 1020 https://www.cnblogs.com/violet-acmer/p/9852294.html 讲解此题前,先谈谈何为最长上升子序列,以及求法: 一.相关概念 ...
- codevs——T1044 拦截导弹 || 洛谷——P1020 导弹拦截
http://codevs.cn/problem/1044/ || https://www.luogu.org/problem/show?pid=1020#sub 时间限制: 1 s 空间限制: 1 ...
- 洛谷P1020 导弹拦截【单调栈】
题目:https://www.luogu.org/problemnew/show/P1020 题意: 给定一些导弹的高度. 一个导弹系统只能拦截高度不增的一系列导弹,问如果只有一个系统最多能拦截多少导 ...
- 洛谷P1020导弹拦截——LIS
题目:https://www.luogu.org/problemnew/show/P1020 主要是第二问,使用了dilworth定理:一个序列中最长不上升子序列的最大覆盖=最长上升子序列长度. di ...
- 洛谷 - P1020 - 导弹拦截 - 最长上升子序列
https://www.luogu.org/problemnew/show/P1020 终于搞明白了.根据某定理,最少需要的防御系统的数量就是最长上升子序列的数量. 呵呵手写二分果然功能很多,想清楚自 ...
- 洛谷P1020 导弹拦截 题解 LIS扩展题 Dilworth定理
题目链接:https://www.luogu.com.cn/problem/P1020 题目大意: 给你一串数,求: 这串数的最长不上升子序列的长度: 最少划分成多少个子序列是的这些子序列都是不上升子 ...
- 洛谷 [P1020] 导弹拦截 (N*logN)
首先此一眼就能看出来是一个非常基础的最长不下降子序列(LIS),其朴素的 N^2做法很简单,但如何将其优化成为N*logN? 我们不妨换一个思路,维护一个f数组,f[x]表示长度为x的LIS的最大的最 ...
随机推荐
- ES6/ES2015的一些特性的简单使
1.一些常用的ES6的特性: let, const, class, extends, super, arrow functions, template string, destructuring, d ...
- hive JDBC客户端启动
JDBC客户端操作步骤
- fiddler 学习笔记1-下载安装、开启、关闭抓包功能
1 下载安装(安装于C盘之外的空间中) https://www.telerik.com/fiddler 2 开启抓包功能:安装后默认为开启状态 点击 file-capture 或左下角capture ...
- MySQL——安装、配置、启动服务、
1.环境变量配置 将启动连接,加入环境变量中. mysqld :启动服务端 msysql -u 用户名 -p 密码 : 启动客户端 2.windows服务:一直在运行中 E:\wupeiqi\mys ...
- react 入坑笔记(二) - State
React State 一. state 大致思想:在 react 中,每个组件都是一个状态机,通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致.React 里,只需更新组件的 ...
- 时频工具箱tftb
安装:set path 常规里更新 一.信号产生函数: amexpo1s 单边指数幅值调制信号amexpo2s 双边指数幅值调制信号amgauss 高斯幅值调制信号amrect 矩形幅值调制信 ...
- endnote格式
endnote插入参考文献后的对齐方式和缩进空格 听语音 | 浏览:4780 | 更新:2016-11-28 20:46 1 2 3 4 5 6 7 分步阅读 1.endnote 导入到word参考文 ...
- cuda编程-矩阵乘法(2)
采用shared memory加速 代码 #include <stdio.h> #include <stdlib.h> #include <math.h> #inc ...
- Nginx 4层反向代理
L112 是基于TCP POST_ACCEPT阶段 在建立连接后所做的事情 PREACCESS阶段 limit_conn 限流 与HTTP类似 ACCESS阶段 类似HTTP模块用于控制访问权限 S ...
- Android组件化、模块化、插件化
组件:指的是单一的功能组件,如地图组件(MapSDK).扫码组件(QRCode).支付组件(AnjukePay).路由组件(Router)等等: 模块:指的是独立的业务模块,如新房模块(NewHous ...