Cod sursa(job #159489)

Utilizator FlorinC1996Florin C FlorinC1996 Data 14 martie 2008 10:29:37
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
 # include <stdio.h>   
  
# define nmax 15001   
# define FIN "datorii.in"   
# define FOUT "datorii.out"   
  
int n,m,i,a,b,c,H[4*nmax],x,rez;   
  
void update(int c,int x,int y,int poz, int val)   
{   
 int mij;   
 if (x==y)   
  H[c]+=val;   
   else  
     {   
      mij=(x+y) >> 1;   
      if (poz<=mij) update(c << 1,x,mij,poz,val);   
               else update(c << 1 | 1,mij+1,y,poz,val);   
      H[c]=H[c << 1]+H[c << 1 | 1];   
     }   
}   
  
void query(int c,int li,int lf)   
{   
 int mij;   
 if (a<=li && lf<=b)    
   {   
    rez+=H[c];   
    return;   
   }   
 mij=(li+lf) >> 1;   
 if (a<=mij) query(c << 1,li,mij);   
 if (b>mij) query(c << 1 | 1,mij+1,lf);   
}   
  
int main()   
{   
 freopen(FIN,"r",stdin);   
 freopen(FOUT,"w",stdout);   
 scanf("%d %d",&n,&m);   
 for (i=1; i<=n; i++)   
   {   
    scanf("%d",&x);   
    update(1,1,n,i,x);   
   }   
 for (i=1; i<=m; i++)   
   {   
    scanf("%d%d%d",&c,&a,&b);   
    if (c==0) update(1,1,n,a,-b);   
     else  
       {   
        rez=0;   
        query(1,1,n);   
        printf("%d\n",rez);   
       }   
   }   
 return 0;   
}