int c[maxn], s[maxn]; inlineintlowbit(int i){ return i & -i; } inlinevoidupdate(int i, int x){ int y = i * x; for (; i < maxn; i += lowbit(i)) { c[i] += x; s[i] += y; } } inlinevoidupdate(int l, int r, int x){ update(l, x); update(r + 1, -x); } inlineintquery(int* a, int i){ int r = 0; for (; i; i -= lowbit(i)) r += a[i]; return r; } inlineintquery(int l, int r){ return (r - l + 1) * query(c, l - 1) + (r + 1) * (query(c, r) - query(c, l - 1)) - query(s, r) + query(s, l - 1); }