Cod sursa(job #315775)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 17 mai 2009 11:22:19
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<stdio.h>
#include<string.h>

int ai[120000],val,poz,start,finish,suma;

void update(int nod,int st,int dr)
{
	int div;

	if(st==dr)
	{
		ai[nod]+=val;
		return;
	}
	div=(st+dr)/2;
	if(poz<=div)
		update(2*nod+1,st,div);
	else
		update(2*nod+2,div+1,dr);
	ai[nod]=ai[2*nod+1]+ai[2*nod+2];
}

void query(int nod,int st,int dr)
{	
	int div;
	
	if(start<=st && dr<=finish)
	{
		suma+=ai[nod];
		return;
	}
	div=(st+dr)/2;
	if(start<=div)
		query(2*nod+1,st,div);
	if(finish>div)
		query(2*nod+2,div+1,dr);
}

int main()
{
	int n,m,i,nr,cod,t1,t2;

	FILE *f=fopen("datorii.in","r");
	FILE *g=fopen("datorii.out","w");

	memset(ai,0,30000*sizeof(int));
	fscanf(f,"%i%i\n",&n,&m);
	
	for(i=0;i<n;i++)
	{
		fscanf(f,"%i ",&nr);
		poz=i;
		val=nr;
		update(0,0,n-1);
	}
	
	for(i=0;i<m;i++)
	{
		fscanf(f,"%i%i%i\n",&cod,&t1,&t2);
		if(cod==0)
		{
			poz=t1-1;
			val=-t2;
			update(0,0,n-1);
		}
		else
		{
			start=t1-1;
			finish=t2-1;
			suma=0;
			query(0,0,n-1);
			fprintf(g,"%i\n",suma);	
		}
	}
	fclose(f);
	fclose(g);
	return 0;
}