这个题貌似是一类套路题啊,但是我好像没有见过 (;′⌒`)。
我们首先要观察到一个关键性质:每次操作可以看成原序列上一个区间,且任两个区间要么不交要么包含。
我们考虑最外层之间的拼接是简单的,所以不妨只考虑区间 \([l,r]\) 被同一个最外层区间包含的情况。倘若我们记 \(dp_{l,r,v_1,v_2}\) 为最外层区间值域是 \([v_1,v_2]\) 时的答案的话,我们容易得到一个 \(O(n^6)\) 的算法,这很不好。
考虑优化,一开始我是想考虑目前基于 \([l,r,v_1,v_2]\) 向一侧刷表扩展,这个过程能不能用一个类似单调队列的东西优化,发现我不会。
后来发现倘若我们把状态的设计放松一些,这样我们只需要考虑 \([r+1,p]\) 这段新扩展出来的区域到底是自己玩自己的,还是要前面 \([l,r]\) 的最外层区间来兜底。这样就是 \(O(n^5)\) 的了,可以通过。
下附心路历程。