如果你的区间取模是这样写的
void modifyMod(i64 u, i64 l, i64 r, i64 p) {
if (l <= tr[u].l && tr[u].r <= r && tr[u].ma < p) return;
if (tr[u].l == tr[u].r) {
tr[u].ma = tr[u].sum %= p;
return ;
}
i64 mid = (tr[u].l + tr[u].r) >> 1;
if (l <= mid)
modifyMod(lc, l, mid, p);
if (r > mid)
modifyMod(rc, mid + 1, r, p);
pushup(u);
}
改成这样应该就能过了
void modifyMod(i64 u, i64 l, i64 r, i64 p) {
if (l <= tr[u].l && tr[u].r <= r && tr[u].ma < p) return;
if (tr[u].l == tr[u].r) {
tr[u].ma = tr[u].sum %= p;
return ;
}
i64 mid = (tr[u].l + tr[u].r) >> 1;
if (r <= mid)
modifyMod(lc, l, r, p);
else if (l > mid)
modifyMod(rc, l, r, p);
else {
modifyMod(lc, l, r, p);
modifyMod(rc, l, r, p);
}
pushup(u);
}