欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

A. Points on Line(单调队列)

程序员文章站 2022-06-02 22:19:50
...

A. Points on Line(单调队列) A. Points on Line(单调队列)

有 n 个点,递增输入,任选三个点,不超过 d,问有多少种选择 

直接构造单调递增队列,有点尺取的意思,对于最后加入队尾的元素 a[i],队内满足任意两元素 和 a[i] 满足对应条件,所以答案记为  A. Points on Line(单调队列) , 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;
}