#include using namespace std; typedef long long ll; #define REP(i,n) for(int i=0;i<(int)(n);i++) #define FOR(i,a,b) for(int i=(int)(a);i<(int)(b);i++) #define FORR(i,a,b) for(int i=(int)(b)-1;i>=(int)(a);i--) #define CHMIN(a,b) (a)=min((a),(b)) #define CHMAX(a,b) (a)=max((a),(b)) const ll INF = 1ll<<60; int n,q; int a[125252]; ll sum[125252]; // sqrt decomposition const int N = 100025; // max n const int B = 252; // bucket size const int C = (N+B-1)/B; // max bucket count ll bucketMax[C], bucketMin[C], bucketVal[C]; ll lazyVal[C]; // O(n) calc for max_{l0)sum[it++] += v; calcBucket(l/B); // between bucket while(it+B<=r){addToBucket(it/B, v); it+=B;} // right bucket push(it/B); while(it0)CHMAX(ret, sum[it++]); // between bucket while(it+B<=r){CHMAX(ret, bucketMax[it/B]); it+=B;} // right bucket push(it/B); while(it0)CHMIN(ret, sum[it++]); // between bucket while(it+B<=r){CHMIN(ret, bucketMin[it/B]); it+=B;} // right bucket push(it/B); while(it0)tmp[m++] = sum[it++]; // between bucket while(it+B<=r){ CHMAX(ret, bucketVal[it/B]); tmp[m++] = bucketMax[it/B]; tmp[m++] = bucketMin[it/B]; it += B; } // right bucket push(it/B); while(it