void build() {
for (int i = N+n+1>>1; i; i--) pushup(i);
}
单点加,区间求和
void modify(int x, long long val) {
for (tr[x += N] += val; x >>= 1;) pushup(x);
}
long long query(int l, int r) {
int ans = 0;
for (l+=N-1, r+=N+1; l^r^1; l>>=1, r>>=1) {
if (~l&1) ans += tr[l^1];
if ( r&1) ans += tr[r^1];
}
return ans;
}
区间加,单点查
void modify(int l, int r, long long val) {
for (l+=N-1, r+=N+1; l^r^1; l>>=1, r>>=1) {
if (~l&1) tr[l^1] += val;
if ( r&1) tr[r^1] += val;
}
}
long long query(int x) {
long long ans = 0;
for (x += N; x; x >>= 1) ans += tr[x];
return ans;
}
区间加,区间查min
inline void pushup(int x) {
register int tmp = std::min(tr