Cod sursa(job #198979)

Utilizator mordredSimionescu Andrei mordred Data 16 iulie 2008 14:44:05
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <string.h>

int n,m,a[1024];
int i,j,k,q,p,x,aux;

void update(int x, int v){
 for(;x<=n;x+=x&(x-1)^x)
    a[x]+=v; 
}

void update2(int x, int v){
 for(;x<=n;x+=x&(x-1)^x)
    a[x]-=v; 
}

int query(int x){
 int r=0;
 for(;x;x-=x^(x-1)&x)
    r+=a[x];
 return r;
}

int main(){
 freopen("datorii.in","r",stdin);
 freopen("datorii.out","w",stdout);
 
 scanf("%d %d\n",&n,&m);
// char txt[131072];

 for(i=1;i<=n;++i)                      //initializare
    a[i]=0;
 

/*
 gets(txt);                             //citire parsata
 for(i=0,j=1;i<strlen(txt);++i)
    if(txt[i]==' ')
        {
        update(j,aux); 
        ++j;
        aux=0;
        }
    else
        aux=aux*10+txt[i]-'0';          //---
*/

for(i=1;i<=n;++i)
    {
    scanf("%d",&aux);
    update(i,aux);
    }

 for(;m;--m){
        scanf("%d %d %d",&k,&q,&p);
        if(k)
            printf("%d\n",query(p)-query(q-1));
        else
            update2(q,p);
        }

return 0;
}