Cod sursa(job #332445)

Utilizator dodgerblueBogdan P. dodgerblue Data 17 iulie 2009 21:45:54
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.62 kb
#include<stdio.h>
#include<stdlib.h>

long int *c;
int n;

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

void adauga(int x, int i)
{
	while(i<=n)
	{
		c[i]+=x;
		i+=(i^(i-1))&i;
	}
}

int main()
{
	FILE *f,*g;
	int m,i,x,y,z;
	f=fopen("datorii.in","r");
	g=fopen("datorii.out","w");
	
	fscanf(f,"%d%d",&n,&m);
	c=(long int*)calloc(n+1,sizeof(long int));
	
	for(i=1;i<=n;i++)
	{
		fscanf(f,"%d",&x);
		adauga(x,i);
	}
	
	for(i=0;i<m;i++)
	{
	
	fscanf(f,"%d%d%d",&x,&y,&z);
	if(x==0)	adauga(-z,y);
	else 	fprintf(g,"%ld\n",suma(z)-suma(y-1));
	
	}
	
	fclose(f);
	fclose(g);
	return 0;
}