iefnah06

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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 应该减一。

实现

https://ideone.com/iHuO3i

posted on 2020-04-08 14:12  iefnah06  阅读(206)  评论(0)    收藏  举报