Cod sursa(job #136146)

Utilizator fifimusatMusat Florin fifimusat Data 15 februarie 2008 09:17:26
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 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;     
}