RT。只会维护区间和和区间修改,怎么维护区间最值。代码如下
struct BIT
{
int c[2][N];
int lowbit(int x){return x & -x;}
void _add(int k, int x, int y)
{
for (; x < N; x += lowbit(x))
c[k][x] += y;
}
int _ask(int k, int x)
{
int res = 0;
for (; x; x -= lowbit(x))
res += c[k][x];
return res;
}
void add(int l, int r, int k)
{
_add(0, l, k), _add(0, r + 1, -k);
_add(1, l, l * k), _add(1, r + 1, -(r + 1) * k);
}
int ask(int x)
{
return (x + 1) * _ask(0, x) - _ask(1, x);
}
int query(int l, int r)
{
return ((r + 1) * _ask(0, r + 1) - _ask(1, r + 1)) - (l * _ask(0, l) - _ask(1, l));
}
} tree;