暴力82分,对于最后的final操作开个前缀和就可以AC(甚至不用开O2和读入优化),4个标签就用个前缀和,差分、线断树、树状数组根本没用到,纯前缀和+暴力代码:
#include <iostream>
typedef long long ll;
const int maxn = 8e4 + 5;
int main(){
std::ios::sync_with_stdio(0);
std::cin.tie(0),std::cout.tie(0);
char op;
ll a[maxn] = {0},s[maxn];
ll final,n,opt,mod,min,max,l,r,x,ans = 0;
s[0] = 0;
std::cin >> n >> opt >> mod >> min >> max;
while (opt--){
std::cin >> op >> l >> r;
if (op == 'A'){
std::cin >> x;
for (ll i = l;i <= r;i++) a[i] += x;
}
else{
ans = 0;
for (ll i = l;i <= r;i++)
if (min <= a[i] * i % mod && a[i] * i % mod <= max)
ans++;
std::cout << ans << '\n';
}
}
std::cin >> final;
for (int i = 1;i <= n;i++) s[i] = s[i - 1] + (min <= a[i] * i % mod && a[i] * i % mod <= max);
while (final--)
std::cin >> l >> r,std::cout << s[r] - s[l - 1] << '\n';
return 0;
}