Cod sursa(job #147484)

Utilizator acg_111000Caesaurus acg_111000 Data 2 martie 2008 22:59:04
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
    #include<stdio.h>  
    #define nmax 15000  
    #define max(a,b) ((a)>(b)?(a):(b))  
      
    long val,a[nmax],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;  
	 }