hdu1689(线段树成段更新)
2014-07-21 19:37
141 查看
两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum
代码如下:
代码如下:
#include<iostream> #include<algorithm> #include<cstring> #include<stack> #include<queue> #include<set> #include<map> #include<stdio.h> #include<stdlib.h> #include<ctype.h> #include<time.h> #include<math.h> #define N 100005 #define inf 0x7ffffff #define eps 1e-9 #define pi acos(-1.0) #define P system("pause") using namespace std; int res; struct node { int l,r,set; }tree[4*N]; void build(int o,int l,int r)//初始化所有的数字为1 { tree[o].l = l; tree[o].r = r; tree[o].set = 1; if(l == r) return; int m = (l+r)/2; build(2*o , l , m); build(2*o+1 , m+1 , r); } void pushdown(int o)//-1表示颜色是杂色,如果修改区域不一样,则先将其子区域置为父值,对子区域进行操作 { if(tree[o].set != -1) { tree[2*o].set = tree[2*o+1].set = tree[o].set; tree[o].set = -1; } } void update(int o,int x,int y,int v)//将区间[x,y]上的数字设置为v { if(x <= tree[o].l && tree[o].r <= y) { tree[o].set = v; return; } pushdown(o); int m = (tree[o].l+tree[o].r)/2; if(x <= m) update(2*o,x,y,v); if(y > m) update(2*o+1,x,y,v); } void query(int o,int x,int y)//查询区间[x,y]上的sum { if(tree[o].set != -1 && x <= tree[o].l && tree[o].r <= y) { res += tree[o].set*(tree[o].r-tree[o].l+1); return; } int m = (tree[o].l + tree[o].r)/2; if(x <= m) query(2*o,x,y); if(y > m) query(2*o+1,x,y); } int main() { //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); int t, z = 1; scanf("%d",&t); while(t--) { int n,m; scanf("%d%d",&n,&m); build(1,1,n); int i; while(m--) { int x,y,z; scanf("%d%d%d",&x,&y,&z); update(1,x,y,z); } res = 0; query(1,1,n); printf("Case %d: The total value of the hook is %d.\n",z++,res); } return 0; }
相关文章推荐
- 线段树 成段更新
- Codeforces Round #254 (Div. 2) E. DZY Loves Colors(线段树 成段更新)
- hdu 1698 Just a Hook (线段树)(第二部分 成段更新)
- poj 3468 A Simple Problem with Integers 线段树 成段更新
- 线段树 (成段更新)
- POJ3468——线段树成段更新——A Simple Problem with Integers
- poj3468 A Simple Problem with Integers 线段树,成段更新
- 线段树成段更新 zoj 1610
- HDOJ-1698-线段树成段更新
- HDU 1698 Just a Hook(线段树成段更新)
- 线段树(成段更新) 之 poj 3468 A Simple Problem with Integers
- 线段树(成段更新,区间求和lazy操作 )
- hdu 1698 线段树 成段更新 lazy
- HDU1698_Just a Hook(线段树/成段更新)
- POJ 3468 线段树 成段更新 懒惰标记
- zoj 1610 Count the Colors 线段树,成段更新染色
- 线段树成段更新——POJ 3468
- HDOJ 1556 Color the ball 线段树 : 成段更新 单点查询
- 线段树单点更新+成段更新(好)hdu4973(多校联合)
- poj 2528 Mayor's posters(线段树,离散化,成段更新染色)