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

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

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

block

返回题目

题解

iii번째 원소 뒤에서 블록을 나눌 수 있다고 하자. 그러면 그 앞에 있는 모든 블록을 정렬하여 이어 붙인 결과는 정렬된 전체 순열의 앞 iii개 원소와 같아야 한다. 따라서 P1,P2,⋯ ,PiP_1,P_2,\cdots,P_iP1​,P2​,⋯,Pi​는 정확히 1,2,⋯ ,i1,2,\cdots,i1,2,⋯,i로 이루어져 있어야 한다.

순열의 원소는 모두 서로 다르므로, 다음 두 조건은 서로 동치이다.

  • P1,P2,⋯ ,PiP_1,P_2,\cdots,P_iP1​,P2​,⋯,Pi​가 정확히 로 이루어져 있다.

두 번째 조건이 성립하면 앞의 iii개 원소는 모두 iii 이하이고, 서로 다른 iii개의 원소이므로 반드시 111부터 iii까지를 정확히 한 번씩 포함한다.

따라서 왼쪽부터 순열을 읽으며 지금까지의 최댓값을 관리하고, 그 최댓값이 현재 위치 iii와 같은 모든 지점에서 블록을 나누면 된다. 이러한 지점을 모두 선택해도 인접한 두 경계 사이의 블록은 필요한 연속된 값 구간을 정확히 포함하므로 모든 분할 조건을 만족한다. 가능한 모든 경계를 선택하므로 블록 개수도 최대이다.

시간 복잡도는 O(N)O(N)O(N)이고, 입력을 저장하지 않으면 추가 공간 복잡도는 O(1)O(1)O(1)이다.

Solution written by GPT5.6

1,2,⋯ ,i1,2,\cdots,i1,2,⋯,i
  • max⁡(P1,P2,⋯ ,Pi)=i\max(P_1,P_2,\cdots,P_i)=imax(P1​,P2​,⋯,Pi​)=i이다.