Cod sursa(job #163190)

Utilizator jupanu92Anonim jupanu92 Data 21 martie 2008 17:53:03
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
    #include <fstream>  
   #define MAX 15001  
      
    using namespace std;  
      
    int m, n;  
   int a[MAX];  
     
   void add(int x, int v);  
   void pay(int x, int v);  
   int sum(int x);  
   int bit(int x);  
     
  int main()  
   {  
       int i, x, v, v1, v2, s1 = 0, s2 = 0, c;  
      ifstream fin("datorii.in");  
       ofstream fout("datorii.out");  
         
      fin >> n >> m;  
        
       for (i = 1; i <= n; i++)  
           a[i] = 0;  
       for (i = 1; i <= n; i++)      
      {  
          fin >> c;  
          add(i, c);  
       }      
         
       for (i = 1; i <= m; i++)  
       {  
           fin >> c;  
           if (c == 0)  
           {  
               fin >> x >> v;  
               pay(x, v);      
          }  
           if (c == 1)  
           {  
               fin >> v1 >> v2;  
               s1 = sum(v2);  
               if (v1 != 1)   
               {  
                  s2 = sum(v1-1);  
                   fout << s1-s2 << "\n";  
               }      
               else           
               {  
                  fout << s1 << "\n";      
               }                 
          }  
       }  
         
       fin.close();  
       fout.close();  
         
       return 0;  
   }  
     
   void add(int x, int v)  
   {  
       int i;  
       for (i = x; i <= n; i += bit(i))  
           a[i] += v;      
   }  
     
   void pay(int x, int v)  
   {  
       int i;  
       for (i = x; i <= n; i += bit(i))  
           a[i] -= v;  
   }  
     
   int sum(int x)  
   {  
       int s = 0, i;  
       for (i = x; i > 0; i -= bit(i))      
           s += a[i];  
       return s;  
   }  
    
   int bit(int x)  
   {  
       return (x&(x-1))^x;      
   }