线段树
维护区间最值以及满足最值的个数
struct SGT{
int mx[N<<2],tg[N<<2],su[N<<2];
#define mid ((l+r)>>1)
#define lc (u<<1)
#define rc ((u<<1)|1)
void bld(int u,int l,int r){
mx[u]=tg[u]=su[u]=0;
if(l==r) return;
bld(lc,l,mid);
bld(rc,mid+1,r);
}
void pst(int u,int x){
mx[u]+=x;
tg[u]+=x;
}
void psd(int u){
if(!tg[u]) return;
pst(lc,tg[u]);
pst(rc,tg[u]);
tg[u]=0;
}
void psu(int u){
mx[u]=max(mx[lc],mx[rc]);
su[u]=0;
if(mx[lc]==mx[u]) Madd(su[u],su[lc]);
if(mx[rc]==mx[u]) Madd(su[u],su[rc]);
mx[u]+=tg[u];
}
void add(int u,int l,int r,int x,int y){
if(l==r){
Madd(su[u],y);
return;
}
psd(u);
if(x<=mid) add(lc,l,mid,x,y);
else add(rc,mid+1,r,x,y);
psu(u);
}
void upd(int u,int l,int r,int a,int b,int x){
if(a<=l && r<=b){
pst(u,x);
return;
}
psd(u);
if(a<=mid) upd(lc,l,mid,a,b,x);
if(b>mid) upd(rc,mid+1,r,a,b,x);
psu(u);
}
}T[2];
标签:struct,int,mid,模板,数据结构,最值
From: https://www.cnblogs.com/szsz/p/16633370.html