rt,看数据似乎要爆int,果断换上__int128
#include<iostream>
#define re register
#define int __int128
using namespace std;
const int N = 1e7 + 5;
int n,opt,mod,minn,maxx,final;
int d[N],ans[N];
inline int read(){
re char c = getchar();
int x = 0;
while(c < '0' || c > '9'){
c = getchar();
}
while(c >= '0' && c <= '9'){
x = x * 10 + c - '0';
c = getchar();
}
return x;
}
inline void write(int n){
if(n < 0){
putchar('-');
n *= -1;
}
if(n >= 10){
write(n / 10);
}
putchar(n % 10 + '0');
}
inline int find(int l,int r){
int cnt = 0,tmp = 0;
for(re int i = 1;i <= r;i ++){
tmp += d[i];
int mid = tmp * i % mod;
if(i >= l && minn <= mid && mid <= maxx){
cnt ++;
}
}
return cnt;
}
signed main(){
n = read();
opt = read();
mod = read();
minn = read();
maxx = read();
for(re int i = 1;i <= opt;i ++){
char c = getchar();
while(c != 'A' && c != 'Q'){
c = getchar();
}
if(c == 'A'){
int l = read(),r = read(),x = read();
d[l] += x;
d[r + 1] -= x;
}else if(c == 'Q'){
int l = read(),r = read();
write(find(l,r));
putchar('\n');
}
}
final = read();
int tmp = 0;
for(re int i = 1;i <= n;i ++){
tmp += d[i];
int mid = tmp * i % mod;
ans[i] = ((minn <= mid) && (mid <= maxx)) ? 1 : 0;
ans[i] += ans[i - 1];
}
for(re int i = 1;i <= final;i ++){
int l = read(),r = read();
write(ans[r] - ans[l - 1]);
putchar('\n');
}
return 0;
}