Cod sursa(job #159727)

Utilizator ghitza_2000Stefan Gheorghe ghitza_2000 Data 14 martie 2008 12:43:37
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 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;      
}