Cod sursa(job #1872631)

Utilizator omnipedPopescu Octavian omniped Data 8 februarie 2017 14:10:16
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<iostream>
#include<vector>
#include<fstream>
#define zeros(x) ((x^(x-1)) & x)
using namespace std;
int N, M;
int vec[1005];




void Adauga(int poz, int val)
{
	
	for ( auto i = poz;i <= N;i += zeros(i))
		vec[i] += val;
		
}



int Suma(int poz)
{
	int SumaInterogare = 0;
	for (auto i = poz;i > 0;i -= zeros(i))
		SumaInterogare += vec[i];
	return SumaInterogare;

}



int main()
{
	ifstream fin("datorii.in");
	ofstream fout("datorii.out");
	
	int x, poz, val;
	fin >> N >> M;
	
	for (auto i = 1;i <= N;i++)
	{
		fin>> val;
		Adauga(i, val);
		
	}
	
	
	while (M--)
	{
		fin >> x >> poz >> val;
		
		if (x == 0)
			Adauga(poz, -val);
		if (x == 1)
			fout << Suma(val) - Suma(poz - 1)<<endl;
	}
	fin.close();
	fout.close();
}