hdu1689(线段树成段更新)
来源:互联网 发布:php implements 编辑:程序博客网 时间:2024/06/08 05:22
两种操作: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;}
0 0
- hdu1689(线段树成段更新)
- HDU1689 区间更新线段树
- HDU1689 Just a Hook (线段树)
- hdu4027 线段树成段更新
- poj3468 线段树成段更新
- 线段树成段更新-MB
- 线段树成段更新
- poj3468(线段树成段更新)
- poj1436(线段树成段更新)
- hdu_1698线段树成段更新
- poj_3468,线段树成段更新
- hdu1698 线段树成段更新
- 线段树成段更新
- 【POJ3468】【线段树成段更新】
- 【HDU1698】【线段树成段更新】
- hdu5023 线段树成段更新
- hdu1698 线段树成段更新
- hdu1689-Just a Hook-线段树-整段区间的替换(延迟标记)
- hdu 2289 二分
- jQuery选择器
- iOS学习笔记——视图上移与键盘弹回
- Connection Statement ResultSet
- 【Operamasks-UI】可编辑表格insertRow和deleteRow遇到空表格时的问题
- hdu1689(线段树成段更新)
- 浅析Android下的Android.mk文件
- python join函数
- moris算法----树的非递归的遍历实现(前序和中序)
- (练习)调整数组顺序 使奇数位于偶数前面
- 共用体使用常用规范
- php——学习笔记,分割字符串,查找字符串,替换字符串
- poj2251
- ACM简单处理大数加法方法