0分求助,样例对,就是0分

P3373 【模板】线段树 2

@[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


|