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

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

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

서로 다른 구간 지우기

返回题目

题解

어떤 값 xxx가 수열에 MMM번 등장한다고 하자. 한 번의 연산에서 지우는 구간은 모든 원소가 서로 달라야 하므로, 한 번의 연산으로 값 xxx를 두 개 이상 지울 수 없다.

따라서 값 xxx를 하나 지우려면, 같은 연산에서 xxx가 아닌 원소도 적어도 하나 같이 지워져야 한다. 전체 원소 중 xxx가 아닌 원소는 N−MN-MN−M개뿐이므로, 값 xxx의 원소는 최대 N−MN-MN−M개만 지울 수 있다. 그러므로 최종적으로 적어도

M−(N−M)=2M−NM-(N-M)=2M-NM−(N−M)=2M−N

개의 xxx가 남아야 한다.

모든 값에 대해 생각하면, MMM을 가장 많이 등장하는 값의 등장 횟수라고 할 때 정답은 적어도

max⁡(0,2M−N)\max(0,2M-N)max(0,2M−N)

이다.

이제 이 하한을 항상 달성할 수 있음을 보인다.

먼저 M>N/2M>N/2M>N/2라고 하자. 가장 많이 등장하는 값을 xxx라고 하자. 수열에 xxx가 아닌 원소가 남아 있다면, 현재 수열에는 xxx와 xxx가 아닌 원소가 인접한 위치가 반드시 존재한다. 그 두 원소는 서로 다르므로 길이 22 구간으로 지울 수 있다. 이 연산을 반복하면 가 아닌 모든 원소를 지울 수 있고, 그때마다 도 하나씩 같이 지워진다. 따라서 최종적으로 개의 만 남길 수 있다.

이제 M≤N/2M \le N/2M≤N/2인 경우를 보자. 이 경우에는 모든 원소를 지울 수 있다. 이를 현재 수열의 길이에 대한 귀납법으로 보일 수 있다.

현재 수열에서 가장 많이 등장하는 횟수를 MMM이라 하자.

  • 길이가 222라면 두 원소는 서로 달라야 하므로 한 번에 지울 수 있다.
  • 현재 길이를 nnn이라 하자. 어떤 최빈값의 등장 횟수가 충분히 작다면, 인접한 서로 다른 두 원소를 지워도 여전히 어떤 값도 절반을 초과하지 않는다. 따라서 귀납적으로 나머지를 모두 지울 수 있다.
  • 절반에 가까운 최빈값이 있는 경우에도, 그 최빈값과 다른 값이 인접한 경계가 존재한다. 이 길이 222 구간을 지우면 최빈값의 등장 횟수도 함께 줄어든다.
  • 유일하게 주의할 경우는 길이가 홀수이고, 서로 다른 두 값이 각각 (n−1)/2(n-1)/2(n−1)/2번씩 등장하는 경우이다. 이때 나머지 한 원소가 두 종류 사이에 끼어 있으면 서로 다른 세 원소로 이루어진 길이 33 구간을 지울 수 있고, 그렇지 않으면 두 최빈값이 인접한 길이 구간을 지울 수 있다. 어느 경우든 지운 뒤에는 귀납 가정을 적용할 수 있다.

따라서 M≤N/2M \le N/2M≤N/2이면 모든 원소를 지울 수 있다.

결론적으로 정답은

max⁡(0,2M−N)\max(0,2M-N)max(0,2M−N)

이다. 여기서 MMM은 수열에서 가장 많이 등장하는 값의 등장 횟수이다.

구현은 각 값의 등장 횟수를 세고 최댓값 MMM을 구하면 된다.

시간 복잡도는 O(N)O(N)O(N)이다.

2
xxx
xxx
2M−N2M-N2M−N
xxx
3
222