[NOIP1999] 导弹拦截
SOL1:
记 f i f_i fi 表示第 i i i 项结尾的 LDS 长度。
f i = max j < i , a j ≥ a i f j + 1 f_i = \max_{j < i,a_j \ge a_i} f_j + 1 fi=j<i,aj≥aimaxfj+1
朴素做是 O ( n 2 ) O(n^2) O(n2) 的。代码。
显然可以 BIT 优化。代码。
SOL2:
维护 f f f 数组表示 LDS, l e n len len 表示 LDS 长度。
对于元素 a i a_i ai:
- f l e n ≥ a i f_{len} \ge a_i flen≥ai,将 a i a_i ai 插入 f f f 即可。
- f l e n < a i f_{len} < a_i flen<ai,找到 f f f 中第一个小于 a i a_i ai 的元素并替换。
代码
[SDOI2011] 拦截导弹
三维偏序的 dp 题。详见我的博客 CDQ 分治。