@[yhk2275580115](/user/283478)
push_down函数和update_mul函数有问题,已帮你修改好:
```cpp
void push_down(int u) {
tree[u << 1].val = (tree[u << 1].val * tree[u].mul + (tree[u << 1].r - tree[u << 1].l + 1) * tree[u].lazy) % mod;
tree[u << 1 | 1].val = (tree[u << 1 | 1].val * tree[u].mul + (tree[u << 1 | 1].r - tree[u << 1 | 1].l + 1) * tree[u].lazy) % mod;
tree[u << 1].lazy = (tree[u].lazy + tree[u << 1].lazy * tree[u].mul) % mod;
tree[u << 1 | 1].lazy = (tree[u].lazy + tree[u << 1 | 1].lazy * tree[u].mul) % mod;
tree[u << 1].mul = (tree[u << 1].mul * tree[u].mul) % mod;
tree[u << 1 | 1].mul = (tree[u << 1 | 1].mul * tree[u].mul) % mod;
tree[u].lazy = 0;
tree[u].mul = 1;
}
```
```cpp
void update_mul(int l, int r, long long k, int u = 1) {
if (tree[u].l > r || tree[u].r < l)
return;
if (tree[u].l >= l && tree[u].r <= r) {
tree[u].val = k * tree[u].val % mod;
tree[u].mul = k * tree[u].mul % mod;
tree[u].lazy = k * tree[u].lazy % mod;
return;
}
push_down(u);
int mid = (tree[u].l + tree[u].r) >> 1;
if (l <= mid) {
update_mul(l, r, k, u << 1);
}
if (r > mid) {
update_mul(l, r, k, u << 1 | 1);
}
tree[u].val = (tree[u << 1].val + tree[u << 1 | 1].val) % mod;
}
```
by 林聪 @ 2021-02-03 16:00:53
@[林聪](/user/69796) 过了,谢谢
by yhk2275580115 @ 2021-02-03 20:04:58