hdu1166线段树单点更新
来源:互联网 发布:windows能开发ios吗 编辑:程序博客网 时间:2024/06/08 19:26
题目(http://acm.hdu.edu.cn/showproblem.php?pid=1166)
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn=50005;int sum[maxn<<2];//4倍void pushup(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void build(int l,int r,int rt){ if(l==r) { scanf("%d",&sum[rt]); return ; } int m=(l+r)>>1; build(l,m,rt<<1); build(m+1,r,rt<<1|1); pushup(rt);}void update(int p,int add,int l,int r,int rt){ if(l==r) { sum[rt]+=add; return ; } int m=(l+r)>>1; if(p<=m)//注意等号 update(p,add,l,m,rt<<1); else update(p,add,m+1,r,rt<<1|1); pushup(rt);}int search(int ll,int rr,int l,int r,int rt){ if(ll<=l&&rr>=r) { return sum[rt]; } int m=(l+r)>>1; int ans=0; if(ll<=m)//注意等号 ans+=search(ll,rr,l,m,rt<<1); if(rr>m) ans+=search(ll,rr,m+1,r,rt<<1|1); return ans;}int main(){int t,c; char d[10]; scanf("%d",&t); for (c=1;c<=t;c++) { printf("Case %d:\n",c); int n; scanf("%d",&n); build(1,n,1); while(scanf("%s",d)!= EOF) { if(d[0]=='E') break; int x,y; scanf("%d%d",&x,&y); if(d[0]=='Q') { int ans=search(x,y,1,n,1); printf("%d\n",ans); } if(d[0]=='S') update(x,y,1,n,1); if(d[0]=='A') update(x,y,1,n,1); } } return 0;}
树状数组做法
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAXN=50005;int n;int f[MAXN];int lowbit(int x){ return x&(-x);}void add(int x,int value)//数组改值{ while(x<=n) { f[x]+=value; x+=lowbit(x); }}int sum(int x)//数组前x项和{ int ret=0; while(x>0) { ret+=f[x]; x-=lowbit(x); } return ret;}int getsum(int x1,int x2){ return sum(x2)-sum(x1-1);}int main(){int t; int a,b; int num; char s[15]; cin>>t; for(int k=1;k<=t;k++) { printf("Case %d:\n",k); scanf("%d",&n); memset(f,0,sizeof(f)); for(int i=1;i<=n;i++) { scanf("%d",&num); add(i,num); } while(scanf("%s",s)) { if(s[0]=='E') break; scanf("%d%d",&a,&b); if(s[0]=='A') add(a,b); if(s[0]=='S') add(a,-b); if(s[0]=='Q') printf("%d\n",getsum(a,b)); } } return 0;}
0 0
- HDU1166线段树单点更新
- hdu1166(线段树 单点更新)
- hdu1166线段树单点更新
- HDU1166 线段树单点更新
- HDU1166敌兵布阵(线段树单点更新)
- HDU1166:敌兵布阵(线段树单点更新)
- 线段树(单点更新)HDU1166、HDU1742
- hdu1166 敌兵布阵 线段树,单点更新
- HDU1166 敌兵布阵 线段树 单点更新
- hdu1166 敌兵布阵 线段树 单点更新
- 【HDU1166】【线段树】【单点更新】【左闭右开】
- hdu1166(线段树单点更新区间查询)
- HDU1166 线段树 裸 单点更新
- Hdu1166 敌兵布阵 线段树、单点更新
- HDU1166:敌兵布阵(线段树 单点更新)
- hdu1166线段树(单点更新)
- HDU1166 线段树区间求和,单点更新
- HDU1166:敌兵布阵(线段树单点更新)
- JMeter下变量在线程组间的使用
- UIWebView的使用
- 自定义UI制作流程
- 如何定义自己的线程函数与第三方系统兼容
- GDB的命令手册,很不错
- hdu1166线段树单点更新
- UVa227 Puzzle
- Centos镜像地址列表(全)
- java中什么是bridge method(桥接方法)
- poj 2752 Seek the Name, Seek the Fame
- CAMetalLayer&Metal
- linux权限-r-w-代表意思
- HDU1686Oulipo(KMP)
- Twemproxy+Redis Cluster