Cod sursa(job #114001)

Utilizator flionIonescu Ionut Florin flion Data 12 decembrie 2007 09:27:23
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 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;
}