UVa 12086 Potentiometers 树状数组裸题 单点更新 区间查询

2014-11-24 11:23:58 · 作者: · 浏览: 0

题意:单点更新,区间查询

树状数组裸题:

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         using namespace std; #define ll int #define N 200010 int tree[N], maxn; int lowbit(int x){return x&(-x);} int sum(int x){ int ans = 0; while(x>=1){ans+=tree[x]; x-=lowbit(x);} return ans; } void change(int x, int val){ while(x <= maxn) {tree[x] += val; x+=lowbit(x);} } char s[3]; ll num[N]; int main(){ ll n, u, v, Cas = 1; while(scanf("%d",&n),n){ memset(tree, 0, sizeof(tree));maxn = n; for(int i = 1; i <= n; i++){scanf("%d",&num[i]); change(i, num[i]);} if(Cas>1)puts(""); printf("Case %d:\n", Cas++); while(1){ scanf("%s",s); if(s[0]=='E')break; scanf("%d %d",&u,&v); if(s[0]=='S'){ change(u, -num[u]); change(u, v); num[u] = v; } else printf("%d\n", sum(v)-sum(u-1)); } } return 0; }