要满足
我们枚举的个数
加起来即为答案
考虑使用动态开点权值线段树维护

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,x,y;
struct oppo{
    int l,r;
    int siz;
}c[4000006];
int ans,tot,rt;
int ask(int bh,int l,int r,int cl,int cr)
{
    if(!bh) return 0;
    if(cl<=l&&r<=cr) return c[bh].siz;
    int mid=(l+r)/2,ans=0;
    if(cl<=mid) ans+=ask(c[bh].l,l,mid,cl,cr);
    if(cr>mid) ans+=ask(c[bh].r,mid+1,r,cl,cr);
    return ans;
}
void add(int &bh,int l,int r,int k)
{
    if(!bh) bh=++tot;
    if(l==r){
        c[bh].siz++;
        return;
    }
    int mid=(l+r)/2;
    if(k<=mid) add(c[bh].l,l,mid,k);
    else add(c[bh].r,mid+1,r,k);
    c[bh].siz=c[ c[bh].l ].siz+c[ c[bh].r ].siz;
}
signed main()
{
    cin>>n>>x>>y;
    for(int i=1;i<=n;i++){
        int k;
        scanf("%lld",&k);
        ans+=ask(rt,0,1e9,max(0ll,x-k),max(0ll,y-k));
        add(rt,0,1e9,k);
    }
    cout<<ans<<"\n";
    return 0;
}