URL
https://codeforces.com/contest/650/problem/D
解法
考虑修改每个位置 \(i\) 后序列的 LIS,对两种情况取较大值:
- LIS 经过 \(i\),可以直接计算
- LIS 不经过 \(i\),就是要求原序列忽略 \(i\) 的 LIS。考虑原序列中经过每个位置的所有 LIS(最长的),这个位置在对应的所有 LIS 里的的下标是确定的。计 \(f(i)=k\) 为 \(i\) 在经过它的 LIS 里的下标,如果只有一个 \(f(i)=k\),说明所有的最长 LIS 都经过它,因此不经过 \(i\) 的 LIS 应该减一。