樹狀陣列裸題 HDU1166
阿新 • • 發佈:2018-12-13
做的第一道樹狀陣列的題目,模板題。
#include<algorithm> #include<cmath> #include<cstring> #include<queue> #include<iostream> #include<vector> #include<map> #include<cstdio> #include<cstdlib> #define ll long long #define inf 0x3f3f3f3f//1e9+6e7 #define N 50010 #define debug(x) cout<<"X: "<<(x)<<endl #define de cout<<"**"<<endl const double pi=acos(-1.0); using namespace std; int a[N],c[N],n; int lowbit(int i) { return i&-i; } void update(int i,int val) { while(i<=n) { c[i]+=val; i+=lowbit(i); } } int sum(int i) { int ret=0; while(i>0) { ret+=c[i]; i-=lowbit(i); } return ret; } int main() { int T; cin>>T; int cas=1; char s[100]; while(T--) { memset(c,0,sizeof c); memset(a,0,sizeof a); cin>>n; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); update(i,a[i]); } cout<<"Case "<<cas++<<":"<<endl; while(scanf("%s",s)&&strcmp(s,"End")!=0) { int i,j; scanf("%d%d",&i,&j); if(strcmp(s,"Add")==0) {update(i,j);continue;} if(strcmp(s,"Sub")==0) {update(i,-j);continue;} else { cout<<sum(j)-sum(i-1)<<endl; } } } return 0; }