线段树模板
2013-09-11 20:42
225 查看
线段树 模板
构建,查询,更新
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);
}
}
构建,查询,更新
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);
}
}
相关文章推荐
- 线段树(模板)
- Lightoj1120线段树扫描线【模板】
- 线段树模板
- 线段树模板
- 各种树模板(splay,线段树,可持久化线段树...)
- 精华版线段树模板
- 敌兵布阵 HDU - 1166 (线段树单点修改区间求和模板)
- 算法模板——线段树1(区间加法+区间求和)
- 树状数组、线段树模板(一)——单点更新 + HDU 1166 敌兵布阵
- 可持久化线段树 (模板)
- 线段树 各种模板(详解)
- 线段树简单入门模板--单点更新
- 【luogu3372】模板 线段树1
- 线段树模板
- 线段树模板
- 线段树模板
- 洛谷 P3372【模板】线段树 1
- HDU 1166 线段树模板&树状数组模板
- 线段树模板二
- 洛谷OJ U552 守墓人 线段树模板题