Cod sursa(job #829343)

Utilizator costel93FMI - Dumea Eduard Constantin costel93 Data 5 decembrie 2012 09:16:13
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int n, m, v[32770];

void adaugare(int k, int st, int dr, int poz, int val)
{
	if (st == dr)
	{
		v[k] += val;
		return;
	}
	
	int m = (st+dr)/2, fs = k*2;
	
	if (poz <= m) 
		adaugare(fs, st, m, poz, val);
	else 
		adaugare(fs+1, m+1, dr, poz, val);
	
	v[k] = v[fs] + v[fs+1];
}

int cautare(int k, int st, int dr, int inc, int sf)
{
	if (inc <= st && dr <= sf)
		return v[k];
	
	int m = (st+dr)/2, fs = k*2, suma=0;
	if (inc <= m) 
		suma += cautare(fs, st, m, inc, sf);
	
	if (m < sf) 
		suma += cautare(fs+1, m+1, dr, inc, sf);
	return suma;
}

int main()
{
	int a, b, c, i;
	
	f>>n>>m;
	
	for (i=1;i<=n;++i)
	{
		f>>c;
		adaugare(1, 1, n, i, c);
	}
	
	for (i=1;i<=m;++i)
	{
		f>>c>>a>>b;
		if (c==0)
			adaugare(1, 1, n, a, -b);
		else
			g<<cautare(1, 1, n, a, b)<<"\n";
	}
	return 0;
}