题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1166
AC代码
#include<bits/stdc++.h> using namespace std; const int N=5e4+10; int c[N],a[N]; int n; int lowbit(int x){ return x&(-x); } int getsum(int x){ int ans=0; while(x>0){ ans+=c[x]; x-=lowbit(x); } return ans; } void update(int x,int num){ while(x<=n){ c[x]+=num; x+=lowbit(x); } } int main(){ int t; cin>>t; for(int k=1;k<=t;k++){ string cmd; cin>>n; //input array a for(int i=1;i<=n;i++) cin>>a[i]; //init array c memset(c,0,sizeof c); for(int i=1;i<=n;i++) update(i,a[i]); printf("Case %d:\n",k); while(1){ //input command cin>>cmd; if(cmd=="End") break; else if(cmd=="Add"){ int x,add; cin>>x>>add; update(x,add); } else if(cmd=="Sub"){ int x,sub; cin>>x>>sub; update(x,-sub); } else if(cmd=="Query"){ int x,y; cin>>x>>y; cout<<getsum(y)-getsum(x-1)<<endl; } } } }
总结
比较简单,只要记住了三个函数,这种基础题就比较容易了。
当时做的时候忘记了cin>>string能不能接收空格了,答案是不能。
若想接收空格,getline(cin,str);getline函数。
再就是string类型能直接进行字符串判等操作。
就注意这几点就ok,实现真的很简单。