不是很懂
这是报错的
#include <iostream>
#include <cstdio>
#define k1 (k << 1)
#define k2 (k << 1 | 1)
using namespace std;
typedef long long ll;
ll read() {
ll x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {if (ch == '-') f = -1;ch = getchar();}
while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
return x * f;
}
const int N = 1e5 + 5;
ll T, q, mod;
struct Seg_Tree{
ll l, r, val;
}t[N << 2];
void build(ll k, ll l, ll r) {
t[k].l = l, t[k].r = r;
if (l == r) t[k].val = 1;
ll mid = (l + r) >> 1;
build(k1, l, mid);
build(k2, mid + 1, r);
}
void change(ll k, ll t, ll v) {
ll l = t[k].l, r = t[k].r;
if (l == r) {
t[k].val = (!v) ? 1 : v;
return;
}
ll mid = (l + r) >> 1;
if (t <= mid) change(k1, t, v);
else change(k2, t, v);
t[k].val = t[k1].val * t[k2].val % mod;
}
这是未报错的
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
ll read() {
ll x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {if (ch == '-') f = -1;ch = getchar();}
while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
return x * f;
}
const int N = 1e5 + 5;
ll n, m, a[N];
struct Segment_Tree{
ll l, r, sum, tag;
}t[N << 2];
void build(ll k, ll l, ll r) {
t[k].l = l, t[k].r = r;
if (l == r) {
t[k].sum = a[l];
return;
}
ll mid = (l + r) >> 1;
build(k << 1, l, mid);
build(k << 1 | 1, mid + 1, r);
t[k].sum = t[k << 1].sum + t[k << 1 | 1].sum;
}
void push_down(ll k) {
ll k1 = (k << 1), k2 = (k << 1 | 1);
t[k1].sum += t[k].tag * (t[k1].r - t[k1].l + 1);
t[k2].sum += t[k].tag * (t[k2].r - t[k2].l + 1);
t[k1].tag += t[k].tag, t[k2].tag += t[k].tag;
t[k].tag = 0;
}
void change(ll k, ll c_l, ll c_r, ll v) {
ll l = t[k].l, r = t[k].r;
if (c_l <= l && r <= c_r) {
t[k].sum += v * (t[k].r - t[k].l + 1);
t[k].tag += v;
return;
}
if (t[k].tag) push_down(k);
ll mid = (l + r) >> 1;
if (c_l <= mid) change(k << 1, c_l, c_r, v);
if (c_r > mid) change(k << 1 | 1, c_l, c_r, v);
t[k].sum = t[k << 1].sum + t[k << 1 | 1].sum;
}
ll query(ll k, ll q_l, ll q_r) {
ll l = t[k].l, r = t[k].r;
if (q_l <= l && r <= q_r) return t[k].sum;
if (t[k].tag) push_down(k);
ll mid = (l + r) >> 1, res = 0;
if (q_l <= mid) res += query(k << 1, q_l, q_r);
if (q_r > mid) res += query(k << 1 | 1, q_l, q_r);
return res;
}