DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

Permutation Flip

問題に戻る

解説

초기 순열에서 Ai=iA_i=iAi​=i인 위치의 개수를 FFF라 하자.

구간 [l,r][l,r][l,r]을 뒤집고 s=l+rs=l+rs=l+r이라 두면, 구간 안의 원래 위치 jjj에 있던 값 AjA_jAj​는 위치 s−js-js−j로 이동한다. 따라서 이 값이 뒤집은 뒤 고정점이 되기 위한 필요충분조건은 Aj=s−jA_j=s-jAj​=s−j, 즉 j+Aj=sj+A_j=sj+Aj​=s이다.

그러므로 구간 [l,r][l,r][l,r]을 뒤집은 뒤의 고정점 개수는

F−#{j:l≤j≤r, Aj=j}+#{j:l≤j≤r, j+Aj=l+r}F-\#\{j:l \leq j \leq r,\ A_j=j\}+\#\{j:l \leq j \leq r,\ j+A_j=l+r\}F−#{j:l≤j≤r, A

이다. 따라서 위 식에서 빼지는 양과 더해지는 양의 차이를 최대화하면 된다.

고정된 s=l+rs=l+rs=l+r에 대해 가능한 lll의 범위는

max⁡(1,s−N)≤l≤⌊s−12⌋\max(1,s-N) \leq l \leq \left\lfloor\frac{s-1}{2}\right\rfloormax(1,s−N)≤l≤⌊2s−

이다. 또한 j+Aj=sj+A_j=sj+Aj​=s인 위치 jjj가 구간 [l,s−l][l,s-l][l,s 안에 들어가는 조건은 와 같다. 각 마다 인 위치들의 값을 모아 정렬해 두면, 주어진 에서 새로 생기는 고정점 개수는 이분 탐색으로 구할 수 있다.

기존 고정점 개수는 고정점 prefix sum으로 바로 구한다. 고정된 sss에서 lll을 증가시키면 새로 생기는 고정점 개수는 저장해 둔 min⁡(j,Aj)\min(j,A_j)min(j,Aj​) 값을 지날 때만 감소하고, 기존 고정점 개수는 감소할 수만 있다. 따라서 최적의 lll은 가능한 최솟값이거나, 어떤 저장된 값 에 대해 인 경우만 확인하면 충분하다.

각 위치는 정확히 하나의 s=i+Ais=i+A_is=i+Ai​에만 들어가므로 후보 수의 총합은 O(N)O(N)O(N)이다. 전체 시간 복잡도는 정렬과 이분 탐색을 포함해 O(Nlog⁡N)O(N\log N)O이고, 메모리 복잡도는 이다.

Solution written by GPT5.5

j​
=
j}+
#{j:
l≤
j≤
r, j+
Aj​=
l+
r}
1
​
⌋
−
l]
l≤min⁡(j,Aj)l \leq \min(j,A_j)l≤min(j,Aj​)
sss
j+Aj=sj+A_j=sj+Aj​=s
min⁡(j,Aj)\min(j,A_j)min(j,Aj​)
lll
xxx
x+1x+1x+1
(
N
log
N
)
O(N)O(N)O(N)