Solution
- S t e p 1 Step\,1 Step1
分析整个操作过程是什么特点。如果之后有一个长度比之前最短的还要短,那么后面的统统截掉,相当于白给,所以,任何降序的操作都是无意义的。所以先利用单调栈处理出一个严格单调上升的序列(注意 n n n也要放进去,因为 n n n是初始长度)。
- S t e p 2 Step\,2 Step2
面对一个单调上升的序列,需要一个方法来处理答案。考虑从长度为 a → b a\to b a→b,则必定是长度为 a a a时的若干个循环加上一个 a a a的前缀构成长度为 b b b。
而这样的两个部分可以看成是从 b b b拆开来的,一个是 a a a的 ⌊ b a ⌋