Cod sursa(job #1259252)

Utilizator Mr.DoomRaul Ignatus Mr.Doom Data 9 noiembrie 2014 21:10:53
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
using namespace std;

ifstream is("datorii.in");
ofstream os("datorii.out");

int aib[15001];
int n, m;

void Update(int pos, int val);
void Achitare(int pos, int val);
int Interogare(int pos);

int main()
{
	is >> n >> m;
	int val;
	for ( int i = 1; i <= n; ++i )
	{
		is >> val;
		Update(i, val);
	}
	int op, p1, p2;
	for ( int i = 1; i <= m; ++i )
	{
		is >> op;
		if ( op )
		{
			is >> p1 >> p2;
			os << Interogare(p2) - Interogare(p1 - 1) << '\n';
		}
		else
		{
			is >> p1 >> val;
			Achitare(p1, val);
		}
	}
	
	is.close();
	os.close();
	return 0;
}


void Update(int pos, int val)
{
	for ( int i = pos; i <= n; i += i & -i )
		aib[i] += val;
}
void Achitare(int pos, int val)
{
	for ( int i = pos; i <= n; i += i & -i )
		aib[i] -= val;
}
int Interogare(int pos)
{
	int s = 0;
	for ( int i = pos; i; i -= i & -i )
		s += aib[i];
	return s;
}