标签:des style color java os io strong 数据
1 10 1 2 3 4 5 6 7 8 9 10 Query 1 3 Add 3 6 Query 2 7 Sub 10 2 Add 6 3 Query 3 10 End
Case 1: 6 33 59简单的区间查询和更新,最重要的是自己敲出来的 好开心。#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <cctype> #include <cmath> #include <cstdlib> #include <vector> #include <queue> #include <set> #include <map> #include <list> using namespace std; const int INF=1<<27; const int maxn=200500; int sum[maxn]; void update(int root,int l,int r,int p,int v) { int mid=(l+r)/2; if(l==r) sum[root]+=v; if(l<r) { if(p<=mid) update(root*2,l,mid,p,v); else update(root*2+1,mid+1,r,p,v); sum[root]=sum[root*2]+sum[root*2+1]; } } int query_sum(int root,int l,int r,int ql,int qr) { int ans=0,mid=(l+r)/2; if(ql<=l&&qr>=r) return sum[root]; if(ql<=mid) ans+=query_sum(root*2,l,mid,ql,qr); if(qr>mid) ans+=query_sum(root*2+1,mid+1,r,ql,qr); return ans; } int main() { char op[20]; int n,T,ql,qr,i,v,q; scanf("%d",&T); for(int cas=1;cas<=T;cas++) { memset(sum,0,sizeof(sum)); printf("Case %d:\n",cas); scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&v); update(1,1,n,i,v); } while(~scanf("%s",op)) { if(strcmp(op,"End")==0) break; else if(strcmp(op,"Add")==0) { scanf("%d%d",&q,&v); update(1,1,n,q,v); } else if(strcmp(op,"Sub")==0) { scanf("%d%d",&q,&v); update(1,1,n,q,-v); } else if(strcmp(op,"Query")==0) { scanf("%d%d",&ql,&qr); printf("%d\n",query_sum(1,1,n,ql,qr)); } } } return 0; }
HDU 1166-敌兵布阵(线段树:单点更新,区间求和),布布扣,bubuko.com
标签:des style color java os io strong 数据
原文地址:http://blog.csdn.net/qq_16255321/article/details/38680909