有2种方式,都是用的lazy标记,但具体用法不同
1.区间加值 2.求区间和
https://www.luogu.com.cn/record/89949709
3.求区间最大值
https://www.luogu.com.cn/record/100443383
struct Tree{ int v; int l,r; }tr[N<<2]; int qry(int k,int x,int y){ int t=inf; if(x<=tr[k].l&&y>=tr[k].r) return tr[k].v; int md=(tr[k].l+tr[k].r)/2; if(x<=md) t=min(t,qry(k1,x,y)); if(y>md) t=min(t,qry(k2,x,y)); return t; } void build(int k,int l,int r){ tr[k].l=l,tr[k].r=r; tr[k].v=inf; if(l==r){ tr[k].v=val[id[l]]; return; } int md=(l+r)/2; build(k1,l,md),build(k2,md+1,r); tr[k].v=min(tr[k1].v,tr[k2].v); }