Cod sursa(job #129097)

Utilizator tErMyAndrei Panturu tErMy Data 28 ianuarie 2008 17:26:09
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
 #include <fstream.h>  
 #define NMAX 15001  
 int v[NMAX],n;  
 long m;  
 void adun(int ind,int val)  
 { int poz=0;  
   while (ind<=n)  
     { v[ind]=v[ind]+val;  
       while ((ind&(1<<poz))==0)  
          poz++;  
       ind=ind+(1<<poz);  
     }  
 }  
 long suma(int x)  
 { int poz=0;  
   long s=0;  
   while (x>0)  
     { s=s+v[x];  
       while ((x&(1<<poz))==0)  
          poz++;  
       x=x-(1<<poz);  
     }  
   return s;  
 }  
 int main()  
 { long i;  
   int c,x,y;  
   ifstream f("datorii.in");  
   ofstream g("datorii.out");  
   f>>n>>m;  
   for (i=1;i<=n;i++) { f>>x;adun(i,x);}  
   for (i=1;i<=m;i++)  
     { f>>c;  
       if (c==0)  
         { f>>x>>y;  
           adun(x,-y);  
         }  
       else  
         { f>>x>>y;  
           g<<suma(y)-suma(x-1)<<'\n';  
         }  
     }  
   f.close();  
   g.close();  
   return 0;  
 }