题解:CF2010C2 Message Transmission Error (hard version)
题目大意
给你一个字符串
题目做法
我们如果暴力枚举发现时间复杂度是
做法
先求出字符串
为什么
当条件满足的时候,那么
给出代码
#include <bits/stdc++.h>
using namespace std;
const int N=100005;
int n,d;
int ans;
int a[N];
int main(){
scanf("%d%d",&n,&d);
for(int i=1; i<=n; i++){
scanf("%d",&a[i]);
}
for(int i=1; i<=n; i++){
int l=lower_bound(a+1,a+n+1,a[i]-d)-a;
int r=upper_bound(a+1,a+n+1,a[i]+d)-a-1;
ans+=(3*i-2*l-r+1)*(r-i)/2;
}
printf ("%d\n",ans);
return 0;
}