线段树模板

发布时间:2016-12-10 9:26:18 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"线段树模板",主要涉及到线段树模板方面的内容,对于线段树模板感兴趣的同学可以参考一下。

线段树 模板 构建,查询,更新 struct Line { int left; int right; int cnt; //延迟标记 }a[MAX]; int n,m,l,r; //n长度,m线段数 int sum; //函数中的num是节点编号 //构建 void Build(int l, int r, int num) { a[num].left = l; a[num].right = r; a[num].cnt = 0; if(l==r) return ; int mid = (a[num].left + a[num].right)/2; Build(l, mid, num*2); Build(mid+1, r, num*2+1); } //查询 void Query(int l, int r, int num) { if(a[num].cnt!=0) { sum += a[num].cnt*(r-l+1); } if(a[num].left == a[num].right) return ; int mid = (a[num].left + a[num].right)/2; if(r<=mid) Query(l, r, num*2); else if(l>mid) Query(l, r, num*2+1); else { Query(l, mid, num*2); Query(mid+1, r, num*2+1); } } //更新 void Change(int l, int r, int num) { if(l==a[num].left && r==a[num].right) { a[num].cnt++; return ; } if(a[num].left == a[num].right) return ; int mid = (a[num].left + a[num].right)/2; if(r<=mid) Change(l, r, num*2); else if(l>mid) Change(l, r, mun*2+1); else { Change(l, mid, num*2); Change(mid+1, r, num*2+1); } }

上一篇:改变动画速率
下一篇:信号量与线程互斥锁的区别

相关文章

关键词: 线段树模板

相关评论