动态开点
#include <bits/stdc++.h>
#define ll long long
#define mid (l+r>>1)
using namespace std;
const int N = 1e5+100;
const ll inf = 1e10+10;
ll L,R;
int n, tot;
int rt, ls[N*40], rs[N*40], tree[N*40]; //需要开N*log(maxlen)的空间,N为插入的点数
void insert(int &o, ll l, ll r, ll data) { //插入一个权值data
if(!o) o = ++tot;
tree[o]++;
if(l == r) return ;
if(data <= mid) insert(ls[o], l, mid, data);
else insert(rs[o], mid+1, r, data);
}
ll query(int o, ll l, ll r, ll h, ll t) { //查询区间和
if(h <= l && t >= r) return tree[o];
if(t < l || h > r) return 0;
return query(ls[o], l, mid, h, t) + query(rs[o], mid+1, r, h, t);
}
int main() {
freopen("a.txt","r",stdin);
ios::sync_with_stdio(0);
cin>>n>>L>>R;
ll sum = 0;
ll ans = 0;
insert(rt,-inf,inf,0); //插入这个0是为了满足题目需求
for(int i = 1; i <= n; i++) {
ll x;
cin>>x;
sum += x;
ans += query(rt,-inf,inf,sum-R,sum-L);
insert(rt,-inf,inf,sum);
}
cout<<ans;
return 0;
}