Cod sursa(job #322411)

Utilizator KickYourAssPopescu Gabriel KickYourAss Data 8 iunie 2009 19:15:51
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<cstdio>   
#define maxn 100005   
  
using namespace std;   
  
int a[maxn],i,n,x,y,z,m;   
  
void update(int p,int v)   
{   
    int c=0;   
    while(p<=n)   
    {   
        a[p]+=v;   
        while(!(p&(1<<c))) ++c;   
        p+=(1<<c);   
        ++c;   
    }   
}   
  
int query(int x)   
{   
    int c=0,s=0;   
    while(x>0)   
    {   
        s+=a[x];   
        while(!(x&(1<<c))) ++c;   
        x-=(1<<c);   
        ++c;   
    }   
       
    return s;   
}   
  
  
int main()   
{   
    freopen("datorii.in","r",stdin);   
    freopen("datorii.out","w",stdout);   
       
    scanf("%d %d",&n,&m);   
       
    for(i=1;i<=n;++i)   
    {   
        scanf("%d",&x);   
        update(i,x);   
    }   
       
    for(i=1;i<=m;++i)   
    {   
        scanf("%d %d %d",&x,&y,&z);   
           
        if(x==0)   
            update(y,-z);   
        else  
            printf("%d\n",query(z)-query(y-1));   
    }   
       
    fclose(stdin);   
    fclose(stdout);   
    return 0;   
}