A. Points on Line(单调队列)
程序员文章站
2022-06-02 22:19:50
...
有 n 个点,递增输入,任选三个点,不超过 d,问有多少种选择
直接构造单调递增队列,有点尺取的意思,对于最后加入队尾的元素 a[i],队内满足任意两元素 和 a[i] 满足对应条件,所以答案记为 , n 为不加入 a[i] 的队列长度
const int N=2e5+5;
int n,m,t;
int i,j,k;
deque<int> d;
int a[N];
int main()
{
IOS;
while(cin>>n>>m){
for(i=1;i<=n;i++) cin>>a[i];
ll ans=0;
for(i=1;i<=n;i++){
d.push_back(a[i]);
while(d.size() && a[i]-d.front()>m) d.pop_front();
ll len=d.size()-1;
ans+=len*(len-1)/2;
}
cout<<ans<<endl;
}
//PAUSE;
}