Cod sursa(job #472680)

Utilizator andrey932Andrei andrey932 Data 26 iulie 2010 11:37:35
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <iostream>
#include <stdio.h>
using namespace std;

#define zero(i) (i^(i-1))&i
int aib[15001],m,n,x,op,a,b,i;
FILE *fin=fopen("datorii.in","r"), *fout=fopen("datorii.out","w");
void aduna(int poz, int val) {
	for(;poz<=n;poz+=zero(poz)) {
		aib[poz]+=val;
	}
}

int suma(int poz) {
	int rez=0;
	for(;poz>0;poz-=zero(poz)) {
		rez+=aib[poz];
	}
	return rez;
}



int main()
{
	fscanf(fin,"%i %i",&n,&m);
	for(i=1;i<=n;i++) {
		fscanf(fin,"%i",&x);
		aduna(i,x);
	}
	for(i=1;i<=m;i++) {
		fscanf(fin,"%i %i %i",&op,&a,&b);
		if (op==0) {aduna(a,-b);}
		else if (op==1) {fprintf(fout,"%i\n",suma(b)-suma(a-1));}
	}
	fclose(fout);
	return 0;
}