首页 > 代码库 > HDU 1166 敌兵布阵
HDU 1166 敌兵布阵
题目地址
线段树,单点更新
#include<cstdio>#include<algorithm>using namespace std;const int Nmax = 50005;int num[Nmax];int n;struct Node{ int l; int r; int data;}tree[Nmax*4];void init(){ for(int i=0;i<Nmax*4;i++) tree[i].l=tree[i].r=tree[i].data=http://www.mamicode.com/0;}void push_up(int root){ tree[root].data=tree[root<<1].data+tree[root<<1|1].data;}void build(int root,int l,int r){ tree[root].l=l; tree[root].r=r; if(l==r) { tree[root].data=num[l]; return; } if(l<r) { int mid=(l+r)>>1; build(root*2,l,mid); build(root*2+1,mid+1,r); push_up(root); }}void update(int root,int l,int r,int data){ if(tree[root].l==l && tree[root].r == r) { tree[root].data+=data; return; } int mid=(tree[root].l+tree[root].r)>>1; if(mid<l) update(root<<1|1,l,r,data); else if(mid>=r) update(root<<1,l,r,data); else { update(root<<1,l,mid,data); update(root<<1|1,mid+1,r,data); } push_up(root);}int query(int root,int l,int r){ if(tree[root].l>=l && tree[root].r<=r) return tree[root].data; int mid=(tree[root].l+tree[root].r)>>1; int ans=0; if(mid<l) ans+=query(root<<1|1,l,r); else if(mid>=r) ans+=query(root<<1,l,r); else ans+=query(root<<1,l,mid)+query(root<<1|1,mid+1,r); return ans;}char s[10];int main(){ int t; //freopen("in.in","r",stdin); scanf("%d",&t); for(int k=1;k<=t;k++) { printf("Case %d:\n",k); scanf("%d",&n); init(); for(int i=1;i<=n;i++) scanf("%d",&num[i]); build(1,1,n); /*int test=query(1,2,2); for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) { printf("%d->%d:%d\n",i,j,query(1,i,j)); } */ //printf("%d\n",query(1,2,6)); /*for(int i=1;i<=26;i++) { if(tree[i].data) printf("num:%d , left:%d , right:%d , data:%d\n",i,tree[i].l,tree[i].r,tree[i].data); }*/ while(1) { scanf("%s",s); if(s[0]==‘E‘) break; int x,y; scanf("%d%d",&x,&y); if(s[0]==‘A‘) { update(1,x,x,y); } else if(s[0]==‘S‘) { update(1,x,x,-y); } else { printf("%d\n",query(1,x,y)); } } } return 0;}
HDU 1166 敌兵布阵
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。