hdu 1166 (线段树单节点更新,区间和)
来源:互联网 发布:旅游数据库概念模型 编辑:程序博客网 时间:2024/05/01 04:29
点击打开链接http://acm.hdu.edu.cn/showproblem.php?pid=1166
题意在这里我就不说了,感觉好坑啊,因为最后的输出格式就一直错因为,我没有加 :这个符号
这是简单的线段树题,主要就体现了,建树 ,更新,查询的功能,不是太理解,看模板打下来的。还能算是理解点,以后慢慢深入吧
嘿 ,看我的代码,希望能够帮助你哦 !!!!!!!!
#include<stdio.h>#include<algorithm>#include<iostream>#include<string.h>using namespace std;const int N=50005;int n,num[N],cnt;char ss[20];int Sum;struct node{ int l; int r; int sum;}tree[4*N]; 因为线段树是完全的二叉树,这样一来,所占的内存就会大的,所以线段数组要开打四倍void build(int x,int y,int n)//基本的建树 ,这个建树呢,把其中的数据值 赋值到了线段树数组上,也不错{ tree[n].l=x; tree[n].r=y; if(x==y) { tree[n].sum=num[x]; return ; } int mid=(x+y)/2; build(x,mid,2*n); build(mid+1,y,2*n+1); tree[n].sum=tree[n*2].sum+tree[n*2+1].sum;//回溯,更新父节点的值}void update(int x,int v,int n)//这个函数就是更新啦{ if(tree[n].l==x&&tree[n].r==x) { tree[n].sum+=v; return ; } int mid=(tree[n].l+tree[n].r)/2; if(x<=mid) { update(x,v,2*n); } else { update(x,v,2*n+1); } tree[n].sum=tree[n*2].sum+tree[n*2+1].sum;}void query(int x,int y,int n){ int mid=(tree[n].l+tree[n].r)/2; if(tree[n].l==x&&tree[n].r==y) { Sum+=tree[n].sum; } else if(x>mid) { query(x,y,2*n+1); } else if(mid>=y) { query(x,y,2*n); } else { query(x,mid,2*n); query(mid+1,y,2*n+1); }}int main(){ int t; scanf("%d",&t); cnt=1; int x,y; while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&num[i]); } build(1,n,1); printf("Case %d:\n",cnt++); while(1) { Sum=0; scanf("%s",ss); if(ss[0]=='Q') { scanf("%d%d",&x,&y); query(x,y,1); printf("%d\n",Sum); } else if(ss[0]=='A') { scanf("%d%d",&x,&y); update(x,y,1); } else if(ss[0]=='S') { scanf("%d%d",&x,&y); update(x,-y,1); } else { break; } } } return 0;}
0 0
- hdu 1166 (线段树单节点更新,区间和)
- hdu 1754 I Hate it(线段树的单节点更新,求区间最大值)
- hdu 1166 敌兵布阵(求区间的和,单节点更新)
- HDU 1166-敌兵布阵(线段树单节点更新)
- 线段树入门单节点更新区间求最大值hdu1754
- 线段树维护区间和模板(单结点更新)(1166)
- hdu 1166 线段树单点更新和区间求和
- 线段树单节点更新
- HDU 1698(线段树区间更新)
- HDU 1698(线段树 区间更新)
- HDU 1698(线段树区间更新)
- hdu 3577(线段树区间更新)
- HDU 1698(线段树,区间更新)
- HDU 1166 单点更新 区间求和(ZKW 线段树)
- hdu 5023(线段树区间更新+区间查询)
- HDU 1166 敌兵布阵——单节点更新的线段树
- HDU 1698 Just a Hook(线段树 区间更新 + 查询区间和)
- HDU 1754-I Hate It(线段树单节点更新)
- 信号发送函数kill raise alarm setitimer abort
- Android报错:java.lang.UnsupportedClassVersionError
- mysql 清除连接
- iOS 正则表达式
- HDU 5621 KK's Point(组合数学)
- hdu 1166 (线段树单节点更新,区间和)
- http幂等性
- sqlmap的简单使用
- 如何巧妙的变量更新绑定到Adapter的List呢,并更新到数据库呢?
- eclipse自动退出
- 设计模式-创建型-建造者模式(Builder)
- android 视图性能优化
- EF Lanbda表达式
- iOS 认识CoreData-多线程