本人在调 P2801 分块做法的时候,发现在预处理的时候 add 标记出现了增加的奇怪情况,后来直接初始化才过的,求大佬看一下为什么会出现这种情况。
附主函数代码:其中只有 Add
函数才会增加 add
的值。
signed main(){
// freopen("in.in", "r", stdin);
// freopen("out.txt", "w", stdout);
scanf("%lld%lld", &n, &q);
for(int i = 1; i <= n; ++i) scanf("%lld", &a[i]);
int len = sqrt(n) + 1;
for(int i = 1; i <= len; ++i){
L[i] = (i - 1) * len + 1; R[i] = len * i;
}
if(len * len != n){
L[len + 1] = len * len + 1, R[len + 1] = n; ++len;
}
for(int i = 1; i <= len; ++i){
for(int j = L[i]; j <= R[i]; ++j){
P[j] = i; d[i].push_back(a[j]);
}
sort(d[i].begin(), d[i].end());
}
memset(add, 0, sizeof(add));
//printf("%lld >>>>>\n", add[1]);
while(q--){
scanf("%s%lld%lld%lld", opt + 1, &l, &r, &x);
if(opt[1] == 'M'){
//printf("%lld %lld %lld z\n", l, r, x);
Add(l, r, x);
}
else {
printf("%lld\n", query(l, r, x));
}
}
}