Cod sursa(job #3002151)

Utilizator RobyDarioCorjuc Roberto RobyDario Data 14 martie 2023 14:15:26
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <iostream>
#include <fstream>

using namespace std;

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

#define zeros(x)((x^(x - 1))& x)
int aib[100001], n, m;

void adaugare(int x, int cantitate) {
	for (int i = x; i <= n; i += zeros(i)) {
		aib[i] += cantitate;
	}
}
int compute(int x) {
	int ret = 0;
	for (int i = x; i > 0; i -= zeros(i)) {
		ret += aib[i];
	}
	return ret;
}
int main() {
	fin >> n >> m;
	for (int i = 1; i <= n; i++) {
		int x;
		fin >> x;
		adaugare(i, x);
	}
	for (int i = 1; i <= m; i++) {
		int c, nr1, nr2;
		fin >> c >> nr1 >> nr2;
		if (c == 1) {
			fout << compute(nr2) - compute(nr1 - 1)<<'\n';
		}
		else {
			adaugare(nr1, -nr2);
		}
	}
	return 0;
}