DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

원형 순열 정렬

返回题目

题解

원형 배열이므로 최종 상태는 1,2,…,N1,2,\ldots,N1,2,…,N의 회전 중 하나이면 된다.

값 sss를 시작으로 하는 순서

s,s+1,…,N,1,2,…,s−1s,s+1,\ldots,N,1,2,\ldots,s-1s,s+1,…,N,1,2,…,s−1

를 목표로 잡고, 현재 순열을 이 선형 순서로 정렬한다고 하자. 이때 필요한 인접 교환 횟수는 현재 순열에서 이 목표 순서에 대한 inversion의 개수와 같다.

각 sss에 대한 inversion 개수를 IsI_sIs​라고 하자. I1I_1I1​은 O(N2)O(N^2)에 직접 구할 수 있다. 에서 로 넘어갈 때, 값 는 목표 순서에서 맨 앞에서 맨 뒤로 이동한다. 현재 순열에서 값 의 위치를 라고 하면 다음이 성립한다.

Is+1=Is+(N−poss)−(poss−1)I_{s+1}=I_s+(N-pos_s)-(pos_s-1)Is+1​=Is​+(N

따라서 모든 IsI_sIs​를 O(N)O(N)O(N)에 갱신할 수 있다.

원형 순열에서는 항상 어떤 sss에 대해

Is≤⌊N24⌋I_s \le \left\lfloor \frac{N^2}{4} \right\rfloorIs​≤⌊4N2​

가 성립한다. 그러한 sss를 하나 고른 뒤, 목표 순서에 대한 inversion을 하나씩 없애는 방식으로 버블 정렬을 수행하면 된다. 이때 수행한 교환 횟수는 정확히 IsI_sIs​이다.

전체 시간 복잡도는 O(N2)O(N^2)O(N2)이고, 출력하는 연산 수는 제한을 넘지 않는다.

O(N2)
sss
s+1s+1s+1
sss
sss
posspos_sposs​
−
poss​)−
(poss​−
1)
⌋