Cod sursa(job #168975)

Utilizator ovy2906Popescu Ovidiu ovy2906 Data 31 martie 2008 22:10:25
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
 #include<fstream>  
 using namespace std;  
   
 ifstream fin("datorii.in");  
 ofstream fout("datorii.out");  
   
 #define Max 15000  
   
 int a[5*Max],n,poz,start,end,val,sum;  
 void modi(int,int,int);  
 void suma(int,int,int);  
   
 int main()  
 {  
     int k,t;  
     fin>>n>>t;  
     for(poz=1;poz<=n;poz++)  
     {  
         fin>>val;  
         modi(1,1,n);  
     }  
      while(t--)  
      {  
         fin>>k;  
         switch(k)  
          {  
              case 0: fin>>poz>>val; val=-val; modi(1,1,n); break;  
               case 1: fin>>start>>end; sum=0; suma(1,1,n); fout<<sum<<'\n';  
         }  
      }  
      return 0;  
  }  
   
 void modi(int k,int i,int j)  
 {  
       if(i==j)  
      {  
           a[k]+=val;  
          return;  
       }  
       int mij=(i+j)/2;  
      if(poz<=mij) modi(2*k,i,mij);  
      else modi(2*k+1,mij+1,j);  
       a[k]=a[2*k]+a[2*k+1];  
   }  
    
  void suma(int k,int i,int j)  
  {  
      if(start<=i&&j<=end)  
      {  
          sum+=a[k];  
         return;  
      }  
     int mij=(i+j)/2;  
       if(start<=mij) suma(2*k,i,mij);  
       if(mij<end) suma(2*k+1,mij+1,j);  
 }