難易度評価

難易度を1〜10段階で評価できます。投票はあとから変更・取り消しできます。

難易度(投票) 未投票 (0票)

投票の分布

まだ投票はありません。

  1. Lv.10票
  2. Lv.20票
  3. Lv.30票
  4. Lv.40票
  5. Lv.50票
  6. Lv.60票
  7. Lv.70票
  8. Lv.80票
  9. Lv.90票
  10. Lv.100票

難易度の目安を見る ↗

ログインして難易度を投票

外部サイトへ移動します

リンク先の URL を確認してから開いてください。

別タブで開く

Prefix Reverse

作成者 mackerel38

テスター kazuppa、loop0919

難易度(作成者設定) Lv.5

難易度(投票) 未投票 (0票)

実行時間制限
2 秒
メモリ制限
512 MiB

解説

Q1,Q2,…,QiQ_1, Q_2, \dots, Q_i を Qi,Qi−1,…,Q1Q_i, Q_{i-1}, \dots, Q_1 に同時に置き換えることを長さ ii の反転と呼ぶ。

kk 回目の操作で反転すると Q1=kQ_1 = k となる。操作を行った後、 Q1=P1Q_1 = P_1 となる必要があるため、最後の反転は k=P1k = P_1 での操作である。

反転が 11 回だけの場合、条件を満たすように行えるのは長さ 11 の反転のみであり、スコア A1A_1 を得られる。

反転が 22 回以上の場合を考える。最初の反転が長さ LL とすると、その後に k=P1k = P_1 での反転をする必要があるので PL<P1P_L \lt P_1 である。よって、 P1=max⁡(P1,…,PL)P_1 = \max(P_1, \dots, P_L) かつ PL=min⁡(P1,…,PL)P_L = \min(P_1, \dots, P_L) が必要である。この反転で、 QL=P1Q_L = P_1 となる。

k<P1k \lt P_1 となる kk において反転するとき、反転する前は Q1<kQ_1 \lt k であるため、反転する範囲に P1P_1 は含まれず、QL=P1Q_L = P_1 のままである。

よって、最後の反転は長さ LL の反転であるため、その直前では Q=(PL,PL−1,…,P1,PL+1,PL+2,…,PN)Q = (P_L, P_{L-1}, \dots, P_1, P_{L+1}, P_{L+2}, \dots, P_N) である。しかし、 22 回の長さ LL の反転の間に別の反転をすると PL<Q1P_L < Q_1 となってしまう。したがって、反転する回数はちょうど 22 回であるとわかる。

以上より、答えは次の条件を満たす LL に対する 2AL2A_L の最大値と、 A1A_1 の大きい方である。

  • 2≤L≤N2 \le L \le N
  • P1=max⁡(P1,…,PL)P_1 = \max(P_1, \dots, P_L)
  • PL=min⁡(P1,…,PL)P_L = \min(P_1, \dots, P_L)

PP の先頭から順に、累積最小値・最大値を持つことで各 LL に対して条件を満たすかを O(1)O(1) で判定すると、全体で O(N)O(N) で解くことができる。

ユーザー解説

ユーザー解説を書く

ユーザー解説はまだありません。