模板题.
#include <bits/stdc++.h>using namespace std;const int maxn=2e5+10;int s[maxn];int a[maxn];voID built_tree(int start,int end,int node){ if(start==end) { scanf("%d",&s[node]); return; } int mID=(start+end)/2; int left_node=2*node+1; int right_node=2*node+2; built_tree(start,mID,left_node); built_tree(mID+1,end,right_node); s[node]=s[left_node]+s[right_node];}voID updata_stree(int start,int node,int dex,int val){ if(start==end) { s[node]+=val; return; } int mID=(start+end)/2; int left_node=2*node+1; int right_node=2*node+2; if(dex<=mID){ updata_stree(start,left_node,dex,val); } else{ updata_stree(mID+1,right_node,val); } s[node]=s[left_node]+s[right_node];}int query_stree(int start,int L,int R){ if(R<start||L>end) { return 0; } else if(L<=start&&end<=R) { return s[node]; } else if(start==end){ return s[node]; } int mID=(start+end)/2; int left_node=node*2+1; int right_node=node*2+2; int sum_left=query_stree(start,L,R); int sum_right=query_stree(mID+1,R); return sum_left+sum_right;}int main(){ int T; scanf("%d",&T); int flag=1; while(T--) { int n; scanf("%d",&n); built_tree(0,n-1,0); string x; printf("Case %d:\n",flag++); while(cin>>x) { if(x=="End") break; if(x[0]==‘Q‘){ int u,v; scanf("%d%d",&u,&v); //cout<<"u="<<u<<endl; //cout<<"v="<<v<<endl; cout<<query_stree(0,0,u-1,v-1)<<endl; } else if(x[0]==‘A‘){ int dex,val; scanf("%d%d",&dex,&val); //cout<<"dex="<<dex<<endl; //cout<<"val="<<val<<endl; updata_stree(0,dex-1,val); } else if(x[0]==‘S‘){ int dex,dex-1,-val); } } } return 0;}VIEw Code 总结
以上是内存溢出为你收集整理的线段树模板-敌兵布阵 HDU - 1166全部内容,希望文章能够帮你解决线段树模板-敌兵布阵 HDU - 1166所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)