代码
int hd[maxn]; struct Tree{ int lson,rson,cnt; }; struct CMTree { int id; Tree tree[maxn*40]; void init(){ id=0; } void pushup(int rt){ e.cnt=tree[e.lson].cnt+tree[e.rson].cnt; } void Build_tree(int& rt,int le,int ri) { rt=id++; e.cnt=0; if(le==ri) return; int mid=(le+ri)/2; Build_tree(e.lson,le,mid); Build_tree(e.rson,mid+1,ri); pushup(rt); } void Update(int pre,int& rt,int le,int ri,int k,int d) { rt=id++; if(le==ri){ e.cnt=p.cnt+d; return; } int mid=(le+ri)/2; if(k<=mid) { Update(p.lson,e.lson,le,mid,k,d); e.rson=p.rson; } else { Update(p.rson,e.rson,mid+1,ri,k,d); e.lson=p.lson; } pushup(rt); } int Query(int rt,int le,int ri,int x,int y) { if(x<=le&&ri<=y) return e.cnt; int mid=(le+ri)/2; int ret=0; if(x<=mid) ret+=Query(e.lson,le,mid,x,y); if(y>mid) ret+=Query(e.rson,mid+1,ri,x,y); return ret; } }CT;
时间: 2024-10-05 18:40:24