#include using namespace std; const int nmax=1e6+42; int n,inp[nmax]; struct info { int SZ; long long sum; pair lazy; }; info tree[4*nmax]; info actual(info cur) { cur.sum=cur.sum*cur.lazy.first+cur.SZ*cur.lazy.second; cur.lazy={1,0}; return cur; } info my_merge(info a,info b) { a=actual(a); b=actual(b); a.SZ+=b.SZ; a.sum+=b.sum; return a; } void build(int node,int l,int r) { if(l==r) { tree[node].SZ=1; tree[node].sum=inp[l]; tree[node].lazy={1,0}; return; } int av=(l+r)/2; build(node*2,l,av); build(node*2+1,av+1,r); tree[node]=my_merge(tree[node*2],tree[node*2+1]); } void push(int node) { if(tree[node].lazy.first==-1) { tree[node*2].lazy.first=-tree[node*2].lazy.first; tree[node*2].lazy.second=-tree[node*2].lazy.second; tree[node*2+1].lazy.first=-tree[node*2+1].lazy.first; tree[node*2+1].lazy.second=-tree[node*2+1].lazy.second; } tree[node*2].lazy.second+=tree[node].lazy.second; tree[node*2+1].lazy.second+=tree[node].lazy.second; tree[node].lazy={1,0}; } void update(int node,int l,int r,int lq,int rq,int x) { if(l==lq&&r==rq) { tree[node].lazy.first=-tree[node].lazy.first; tree[node].lazy.second=x-tree[node].lazy.second; return; } push(node); int av=(l+r)/2; if(lq<=av)update(node*2,l,av,lq,min(av,rq),x); if(av