#include #include using namespace std; const int n = 1<<18; const int N = 1<<18; int t[2*N]; int lz[2*N]; void lol(int k, int l, int r) { t[k] += lz[k]; if(l < r) { lz[2*k] += lz[k]; lz[2*k+1] += lz[k]; } lz[k] = 0; } int inc(int k, int l, int r, int x, int y, int v) { lol(k, l, r); if(l > y || r < x) { return t[k]; } if(l >= x && r <= y) { lz[k] += v; return lz[k] + t[k]; } int mid = (l+r)>>1; return t[k] = max(inc(k*2, l, mid, x, y, v), inc(k*2+1, mid+1, r, x, y, v)); } int query(int k, int l, int r, int x, int y) { lol(k, l, r); if(l > y || r < x) { return -2e9; } if(l >= x && r <= y) { return t[k]; } int mid = (l+r)>>1; return max(query(k*2, l, mid, x, y), query(k*2+1, mid+1, r, x, y)); } int main() { ios_base::sync_with_stdio(0); for(int i = 0; i < 1e7; ++i) { if(rand()&1) { int q = rand()%n; int w = rand()%n; if(q > w) swap(q, w); int e = rand()%100; inc(1, 0, N-1, q, w, e); } else { int q = rand()%n; int w = rand()%n; if(q > w) swap(q, w); int ans = query(1, 0, N-1, q, w); cout<