标签:des style http color io os java ar 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<cstring> const int MAXN=55555; int sum[MAXN<<2]; 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 mid=(l+r)>>1; build(l,mid,rt<<1); build(mid+1,r,rt<<1|1); pushup(rt); } int query(int L,int R,int l,int r,int rt) { if(l>=L&&R>=r) return sum[rt]; int mid=(l+r)>>1; int cnt=0; if(L<=mid) cnt=query(L,R,l,mid,rt<<1); if(R>mid) cnt+=query(L,R,mid+1,r,rt<<1|1); return cnt; } void update(int a,int b,int l,int r,int rt) { if(l==r) { sum[rt]+=b; return ; } int mid=(l+r)>>1; if(a<=mid) update(a,b,l,mid,rt<<1); else update(a,b,mid+1,r,rt<<1|1); pushup(rt); } int main() { int cas,t,n; scanf("%d",&t); for(cas=1;cas<=t;cas++) { printf("Case %d:\n",cas); scanf("%d",&n); build(1,n,1); char order[10]; int a,b; while(scanf("%s",order)) { if(order[0]=='E') { break; } else scanf("%d %d",&a,&b); if(order[0]=='Q') printf("%d\n",query(a,b,1,n,1)); else if(order[0]=='A') update(a,b,1,n,1); else update(a,-b,1,n,1); } } return 0; }
标签:des style http color io os java ar strong
原文地址:http://blog.csdn.net/qq_16843991/article/details/39406319