DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제문제집
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

합

문제로 돌아가기

해설

n=R−L+1n=R-L+1n=R−L+1이라고 하자.

정확히 kkk개의 수를 선택하여 만들 수 있는 합을 생각하자. 가장 작은 합과 가장 큰 합은 각각

lo⁡k=kL+k(k−1)2,hi⁡k=kR−k(k−1)2\operatorname{lo}_k=kL+\frac{k(k-1)}2, \qquad \operatorname{hi}_k=kR-\frac{k(k-1)}2lok​=kL+2k(k−1)​,hi

이다. 연속한 정수에서 서로 다른 kkk개를 선택하면 이 두 값 사이의 모든 정수 합을 만들 수 있다. 따라서 정확히 kkk개를 선택하여 만들 수 있는 합은 정수 구간 Ik=[lo⁡k,hi⁡k]I_k=[\operatorname{lo}_k,\operatorname{hi}_k]Ik​=[lo를 이룬다.

kkk가 증가하면 각 구간의 왼쪽 끝점과 오른쪽 끝점이 모두 증가한다. 그러므로 모든 구간 길이의 합에서 이웃한 두 구간이 겹치는 길이를 빼면 합집합의 크기를 얻을 수 있다.

구간 IkI_kIk​의 길이는

hi⁡k−lo⁡k+1=k(n−k)+1\operatorname{hi}_k-\operatorname{lo}_k+1=k(n-k)+1hik​−lok​+1=k(n−

이다. 모든 구간 길이의 합은

∑k=1n(k(n−k)+1)=n(n+1)(n−1)6+n\sum_{k=1}^{n}(k(n-k)+1)=\frac{n(n+1)(n-1)}6+nk=1∑n​(k(n−k)+

이다.

IkI_kIk​와 Ik+1I_{k+1}Ik+1​이 겹치는 길이는

max⁡(0,hi⁡k−lo⁡k+1+1)=max⁡(0,k(n−1−k)−L+1)\max(0,\operatorname{hi}_k-\operatorname{lo}_{k+1}+1) =\max(0,k(n-1-k)-L+1)max(0,hik​−lok+

이다. 양수가 되는 조건은

k(n−1−k)≥Lk(n-1-k)\geq Lk(n−1−k)≥L

이다.

k(n−1−k)k(n-1-k)k(n−1−k)는 대칭이며 k=1,2,…,⌊(n−1)/2⌋k=1,2,\ldots,\lfloor(n-1)/2\rfloork=1,2,…,⌊(n에서 증가한다. 이분 탐색으로 조건을 처음 만족하는 값 를 찾으면 조건을 만족하는 전체 범위는

a≤k≤n−1−aa\leq k\leq n-1-aa≤k≤n−1−a

이다. 조건을 만족하는 값이 없다면 겹치는 길이의 합은 000이다.

b=n−1−ab=n-1-ab=n−1−a라고 할 때, 빼야 할 길이의 합은

∑k=ab(k(n−1−k)−L+1)=(n−1)∑k=abk−∑k=abk2−(L−1)(b−a+1)\sum_{k=a}^{b}\left(k(n-1-k)-L+1\right) =(n-1)\sum_{k=a}^{b}k-\sum_{k=a}^{b}k^2-(L-1)(b-a+1)k=a∑b​

이다. ∑k\sum k∑k와 ∑k2\sum k^2∑k2의 공식을 사용해 O(1)O(1)O(1)에 계산할 수 있다.

모든 계산을 109+710^9+7109+7로 나누어 처리한다. 이분 탐색에서 곱을 비교할 때는 64비트 범위를 안전하게 처리하기 위해 128비트 정수를 사용한다.

테스트 케이스 하나당 시간 복잡도는 O(log⁡(R−L+1))O(\log(R-L+1))O(log(R−L+1))이고, 추가 공간 복잡도는 O(1)O(1)O(1)이다.

Solution written by GPT6

k
​
=
kR−
2k(k−1)​
k
​
,
hik​
]
k)+
1
1
)
=
6n(n+1)(n−1)​+
n
1
​
+
1
)
=
max(0,k(n−
1−
k)−
L+
1)
−
1)/2⌋
aaa
(
k
(
n
−
1
−
k
)
−
L
+
1
)
=
(n−
1)k=a∑b​k−
k=a∑b​k2−
(L−
1)(b−
a+
1)