CF 251a
题意
给定一个数轴,上有单增的 n 个点,给定一个距离 d
求两点 l , r 满足 nr - nl + 1 <= d
求
∑
C
(
3
r
−
l
+
1
)
\sum C\binom{3}{r - l + 1}
∑C(r−l+13)
分析
枚举开头,让结尾是最远能达到的那个点(以此向后推)
那么 cnt +=
C
(
3
r
−
l
+
1
)
C\binom{3}{r - l + 1}
C(r−l+13)
代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5 + 10;
int s[N];
signed main()
{
int n , k;
scanf("%lld %lld" , &n , &k);
for(int i = 1 ; i <= n ; i++)
{
scanf("%lld" , &s[i]);
}
int cnt = 0;
int l = 1;
int r = 3;
for(l ; l + 2 <= n ; l++)
{
while(r <= n && s[r] <= s[l] + k)
{
r++;
}
cnt += (r - l - 1) * (r - l - 2) >> 1;
}
printf("%lld" , cnt);
return 0;
}