Cod sursa(job #13688)

Utilizator robbyRobertino robert robby Data 7 februarie 2007 13:18:12
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>
#define nmax 15001
FILE *f,*g;
long a[nmax],n,m;

long suma(long i)
{
  long j=0;
  while (i>0)
	{
	  j+=a[i];
	  i-=i&(i^(i-1));
	}
  return j;
}

void add(long i,long x)
{
  while (i<=n)
	{
	  a[i]+=x;
	  i+=i&(i^(i-1));
	}
}

void read()
{
   long i,x,y,z;
   f=fopen("datorii.in","rt");
   g=fopen("datorii.out","wt");
   fscanf(f,"%ld %ld",&n,&m);
   for (i=1;i<=n;i++)
	 {
	   fscanf(f,"%ld",&x);
	   add(i,x);
	 }
   for (i=1;i<=m;i++)
	 {
	   fscanf(f,"%ld %ld %ld",&x,&y,&z);
	   if (x==0)
		 {
		   add(y,-z);
		 }
		else
		 {
		   fprintf(g,"%ld\n",suma(z)-suma(y-1));
		 }
	 }

}

int main()
{
   long i,j;
   read();
   fclose(f);
   fclose(g);
   return 0;
}