树状数组RT
#include<bits/stdc++.h>
using namespace std;
struct BIT{
int c[100005];
int lowbit(int x){return x&(-x);}
void update(int x,int n,int y){
for(int i=x;i<=n;i+=lowbit(i)){
c[i]+=y;
}
}
int query(int x){
int tot=0;
for(int i=x;i;i-=lowbit(i)){
tot+=c[i];
}
return tot;
}
}tree;
int m,n,L,R,a[100005],sum1[100005],sum[100005];
signed main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
scanf("%lld%lld%lld",&m,&L,&R);
for(int i=1;i<=m;i++){
scanf("%lld",&a[i]);
sum1[i]=sum[i-1]+a[i];
sum[i]=sum1[i];
}
sum1[m+1]=0;
sort(sum1+1,sum1+2+m);
n=unique(sum1+1,sum1+2+m)-sum1-1;
tree.update(lower_bound(sum1+1,sum1+n+1,0)-sum1,m,1);
int ans=0;
for(int r=1;r<=m;r++){
ans+=tree.query(upper_bound(sum1+1,sum1+n+1,sum[r]-L)-sum1-1)-tree.query(lower_bound(sum1+1,sum1+n+1,sum[r]-R)-sum1-1);
tree.update(lower_bound(sum1+1,sum1+n+1,sum[r])-sum1,m,1);
}
printf("%lld",ans);
return 0;
}