Cod sursa(job #531461)

Utilizator tudorsTudor Siminic tudors Data 9 februarie 2011 18:34:38
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <stdio.h>
#define zeros(x) ((x^(x-1))&x)
using namespace std;
int i,n,m,x;
int AIB[15001];
int c,y;

FILE *f,*g;

void add(int de_unde, int cat)
{
	for (int i=de_unde;i<=n;i+=zeros(i))
		AIB[i]+=cat;
}

int query(int v)
{
	int s=0;
	for (int i=v;i>0;i-=zeros(i))
		s+=AIB[i];
	return s;
}

int main()
{
	f=fopen("datorii.in","r");
	g=fopen("datorii.out","w");
	fscanf(f,"%d %d",&n,&m);
	for (i=1;i<=n;i++)
	{
		fscanf(f,"%d",&x);
		add(i,x);
	}
	for (i=1;i<=m;i++)
	{
		fscanf(f,"%d %d %d",&c,&x,&y);
		if (c)
			fprintf(g,"%d \n",query(y)-query(x-1));
		else
			add(x,-y);
	}
	fclose(f);
	fclose(g);
	return 0;
}