Cod sursa(job #441789)

Utilizator iuly2freemanVasiliev Iulian iuly2freeman Data 13 aprilie 2010 13:03:49
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>

#define zeros(n) (n & -n)

using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

long int n, *c, k, st;

inline void dec(long int x, int y)
{
	while (x <= n)
	{
		c[x] -= y;
		x += zeros(x);
	}
}

inline void add(long int x, int y)
{
	while (x <= n)
	{
		c[x] += y;
		x += zeros(x);
	}
}

inline int interog(int x)
{
	
	long int sum = 0;
	while (x > 0)
	{
		sum += c[x];
		x -= zeros(x);
	}
	return sum;
}

int main()
{
	long int x, y, z, t;
	fin >> n >> t; 
	
	c = new long int[n + 1];
	
	for (int i = 1; i <= n; ++i)
	{
		fin >> x;
		add(i, x);
	};
	
	for (int i = 0; i < t; ++i)
	{
		fin >> x;
		
		if (!x)
		{
			fin >> y >> z;
			dec(y, z);
		}
		else
		{
			fin >> y >> z;
			fout << interog(z) - interog(y - 1) << '\n';
		}
	}
		
	return 0;
}