const int maxn = 1 << 18; int n, dat[2*maxn]; void init(int n_) { n = (1 << 18)-2; memset(dat,0,sizeof(dat)); } //更新第k(0-index)个值为a void update(int k) { k += n+1; dat[k] ++; while(k>0) { k = (k-1)/2; dat[k] = dat[k*2+1]+dat[k*2+2]; } } //求(a,b)val //query(a,b,0,0,n) int query(int a,int b,int k,int l,int r) { //不相交 if(r<a || b<l) return 0; if(a<=l && r<=b) {return dat[k];} else { int vl = query(a,b,k*2+1,l,(l+r)/2); int vr = query(a,b,k*2+2,(l+r)/2+1,r); return vl+vr; } return -1;//error }
ACM模板——线段树&树状数组
猜你喜欢
转载自www.cnblogs.com/Asurudo/p/10658452.html
今日推荐
周排行