struct TREE{
int val[N*4],tag[N*4];
void pushdown(int o,int l,int r){
int x=tag[o];
if(x){
int mid=(l+r)/2;
val[o*2]+=(mid-l+1)*x;
val[o*2+1]+=(r-mid)*x;
tag[o*2]+=x,tag[o*2+1]+=x,tag[o]=0;
}
}
void build(int o,int l,int r){
tag[o]=0;
if(l==r){
val[o]=a[l];
return;
}
int mid=(l+r)/2;
build(o*2,l,mid);
build(o*2+1,mid+1,r);
val[o]=val[o*2]+val[o*2+1];
}
void update(int o,int l,int r,int s,int t,int x){
if(s<=l&&r<=t){
val[o]+=x*(r-l+1);
tag[o]+=x;
return ;
}
pushdown(o,l,r);
int mid=(l+r)/2;
if(mid>=s) update(o*2,l,mid,s,t,x);
if(mid<t) update(o*2+1,mid+1,r,s,t,x);
val[o]=val[o*2]+val[o*2+1];
}//a[p]+=x
int he(int o,int l,int r,int s,int t){
if(s<=l&&r<=t) return val[o];
pushdown(o,l,r);
int mid=(l+r)/2,res=0;
if(mid>=s) res+=he(o*2,l,mid,s,t);
if(mid<t) res+=he(o*2+1,mid+1,r,s,t);
return res;
}
}d;