Cod sursa(job #578444)

Utilizator AnteusPatrascoiu Mihai Anteus Data 11 aprilie 2011 12:10:12
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream.h>
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int r=15001;
int n,m,i,k,x,y,T;
int v[4*r];

void update(int poz, int ls, int ld) {
int h;
	if (ls==ld)
	{
		v[poz]+=y;
		return;
	}
	
	h=(ls+ld)/2;
	if (x<=h)	update(2*poz, ls, h);
	else		update(2*poz+1, h+1, ld);
	
	v[poz]=v[2*poz]+v[2*poz+1];
}

void find(int poz, int ls, int ld) {
int h;
	if (x<=ls && ld<=y)
	{
		T+=v[poz];
		return;
	}
	
	h=(ls+ld)/2;
	if (x<=h)	find(2*poz, ls, h);
	if (y>h)	find(2*poz+1, h+1, ld);
}

void citire(void) {
int i;
fin>>n>>m;

for (i=1;i<=n;i++)
{
	fin>>y;		x=i;
	update(1,1,n);
}
}


int main() {
citire();

for (i=1;i<=m;i++)
{
	fin>>k>>x>>y;
	
	if (k)
	{
		T=0;
		find(1,1,n);
		fout<<T<<"\n";
	}
	else
	{
		y*=-1;
		update(1,1,n);
	}
}

return 0;
}