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

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

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

Sums

返回题目

题解

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)