解説
Q1,Q2,…,Qi を Qi,Qi−1,…,Q1 に同時に置き換えることを長さ i の反転と呼ぶ。
k 回目の操作で反転すると Q1=k となる。操作を行った後、 Q1=P1 となる必要があるため、最後の反転は k=P1 での操作である。
反転が 1 回だけの場合、条件を満たすように行えるのは長さ 1 の反転のみであり、スコア A1 を得られる。
反転が 2 回以上の場合を考える。最初の反転が長さ L とすると、その後に k=P1 での反転をする必要があるので PL<P1 である。よって、 P1=max(P1,…,PL) かつ PL=min(P1,…,PL) が必要である。この反転で、 QL=P1 となる。
k<P1 となる k において反転するとき、反転する前は Q1<k であるため、反転する範囲に P1 は含まれず、QL=P1 のままである。
よって、最後の反転は長さ L の反転であるため、その直前では Q=(PL,PL−1,…,P1,PL+1,PL+2,…,PN) である。しかし、 2 回の長さ L の反転の間に別の反転をすると PL<Q1 となってしまう。したがって、反転する回数はちょうど 2 回であるとわかる。
以上より、答えは次の条件を満たす L に対する 2AL の最大値と、 A1 の大きい方である。
- 2≤L≤N
- P1=max(P1,…,PL)
- PL=min(P1,…,PL)
P の先頭から順に、累積最小値・最大値を持つことで各 L に対して条件を満たすかを O(1) で判定すると、全体で O(N) で解くことができる。