UVA 12086 Potentiometers 树状数组
//#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> #include<sstream> #include<cmath> #include<climits> #include<string> #include<map> #include<queue> #include<vector> #include<stack> #include<set> using namespace std; typedef long long ll; typedef pair<int,int> pii; #define pb(a) push_back(a) #define INF 0x1f1f1f1f #define lson idx<<1,l,mid #define rson idx<<1|1,mid+1,r #define PI 3.1415926535898 template<class T> T min(const T& a,const T& b,const T& c) { return min(min(a,b),min(a,c)); } template<class T> T max(const T& a,const T& b,const T& c) { return max(max(a,b),max(a,c)); } void debug() { #ifdef ONLINE_JUDGE #else freopen("d:\\in.txt","r",stdin); freopen("d:\\out1.txt","w",stdout); #endif } int getch() { int ch; while((ch=getchar())!=EOF) { if(ch!=' '&&ch!='\n')return ch; } return EOF; } int da[200200]; int c[200200]; int n; int add(int x,int v) { while(x<=n) { c[x]+=v; x=x+(x&-x); } return 0; } int sum(int x) { int a=0; while(x>0) { a+=c[x]; x=x-(x&-x); } return a; } int main() { int ca=0; while(scanf("%d",&n)!=EOF&&n) { if(ca!=0) printf("\n"); printf("Case %d:\n",++ca); memset(c,0,sizeof(c)); for(int i=1;i<=n;i++) { scanf("%d",&da[i]); add(i,da[i]); } char op[100]; while(scanf("%s",op)!=EOF&&op[0]!='E') { int a,b; scanf("%d%d",&a,&b); if(op[0]=='S') { add(a,b-da[a]); da[a]=b; }else printf("%d\n",sum(b)-sum(a-1)); } } return 0; }