Cod sursa(job #145931)

Utilizator alexeiIacob Radu alexei Data 29 februarie 2008 19:03:23
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<stdio.h>
#define nmax 15000
#define max(a,b) ((a)>(b)?(a):(b))

int val,a[nmax*4],pos,sol;

void query(int nod,int left,int right,int aux2,int aux3)
{
     
     if( aux2<=left && aux3>=right){
     sol+=a[nod];
     }
     else
     {
         
         int mij=(left+right)/2;
         if( aux2<=mij)      query(nod*2,left,mij,aux2,aux3);
         if(aux3>mij)        query(nod*2+1,mij+1,right,aux2,aux3);
         
     
     }
}
void update(int nod,int left,int right)
{

   if( left == right)
   a[nod]+=val;
   else
   {
       int mij=(left+right)/2;
       if( pos<=mij) update(nod*2,left,mij);
       if( pos> mij) update(nod*2+1,mij+1,right);

      a[nod]=a[nod*2]+a[nod*2+1];
      }
}

int main()
{
    
 freopen("datorii.in","r",stdin);
 freopen("datorii.out","w",stdout);
 
 int n,m,i;
 
 scanf("%d%d",&n,&m);   
    
    for(i=1; i<=n; ++i){
     scanf("%d",&val);
     pos=i;
     update(1,1,n);
     }
    
 int aux1,aux2,aux3;   
    
    for(i=1; i<=m; ++i){
    
    scanf("%d%d%d",&aux1,&aux2,&aux3);
    
    if(!aux1)
    {
    pos=aux2;
    val=-aux3;
    update(1,1,n);
    }
    else
    {
    sol=0;
    query(1,1,n,aux2,aux3);
    printf("%d\n",sol);
 
    }
                       }
   // */
    
    return 0;
}