读懂了题意,题目没有说清楚 n 的取值范围,由于在线次数很少,离线次数过多,不得不考虑最后离线时利用 O(1) 的复杂度
在线的时候暴力即可 ,复杂度 O(1000*n)
const int N=1e5+5;
int i,j,k;
int n,m;
int a[N];
ll d[N];
int mod,minn,maxx,final;
void add()
{
int l=read(),r=read(),w=read();
d[l]+=w; d[r+1]-=w;
}
void ask()
{
int l=read(),r=read(),ans=0;
ll x=0;
for(int i=1;i<l;i++) x=x+d[i];
for(int i=l;i<=r;i++){
x=x+d[i];
if(x*i%mod>=minn && x*i%mod<=maxx) ans++;
}
pd(ans);
}
int main()
{
//IOS;
while(~sdd(n,m)){ sddd(mod,minn,maxx);
char opt;
while(m--){
scanf(" %c",&opt);
if(opt=='Q') ask();
else add();
}
ll ans=0;
for(int i=1;i<=n;i++){ //答案前缀和
ans=ans+d[i];
if(ans*i%mod>=minn && ans*i%mod<=maxx) a[i]=a[i-1]+1;
else a[i]=a[i-1];
}
int x,y; sd(final);
while(final--){
sdd(x,y);
pd(a[y]-a[x-1]);
}
}
//PAUSE;
return 0;
}