CF650D Zip-line 题解

题目链接

Statement

支持单点改的 LIS(最长严格上升子序列),修改之间互不影响,\(n,m\le 4\cdot 10^5\).

Solution

经典结论:

记强制选第 \(i\) 个数前 \(i\) 个数的 LIS 为 \(f(i)\),强制选第 \(i\) 个数后 \(i\) 个数的 LIS 为 \(g(i)\). 若 \(f(i)+g(i)-1=ans\),则 \(i\) 在原序列某些 LIS 中,且 \(i\) 一定在 LIS 的第 \(f(i)\) 个(反证,\(f(i)\) 的极大性)。

\(i\) 是 LIS 的必经点的充要结论是:\(f(i)+g(i)-1=ans\) 且不存在另一个 \(j\) 满足 “\(f(j)+g(j)-1=ans\)\(f(i)=f(j)\)”.

然后就可以做了!

在此题中,我们求出 \(f,g\),记答案为 \(lans\),新的 \(f,g\)\(f',g'\).

观察到显然答案可能为 \(lans-1,lans,lans+1\).

然后对于把 \(a_x\) 修改为 \(y\) 的操作,讨论:

  • 若选了 \(a_x\),显然答案为 \(f'(x)+g'(x)-1\)
  • 若不选 \(a_x\)
    • \(a_x\) 是原序列中必选的点,答案为 \(lans-1\)
    • 否则,\(a_x\) 可被其他点替代 / 可不出现在 LIS 中,答案为 \(lans\)
  • 最终取答案的最大值即可

\(f'(x)\)\(g'(x)\) 离线直接用取 max 的树状数组即可.

posted @ 2024-08-07 08:21  Laijinyi  阅读(4)  评论(0编辑  收藏  举报