Cod sursa(job #3326748)

Utilizator markymrkKemenes Mark markymrk Data 30 noiembrie 2025 12:37:25
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
using namespace std;
#define lsb(x) (x & (-x))
const int Nmax = 2e5 + 5;
int aib[Nmax];
void add(int i, int val, int n, int aib[]) {
	while (i <= n) {
		aib[i] += val;
		i += lsb(i);
	}
}
int sum(int i, int aib[]) {
	int suma = 0;
	while (i > 0) {
		suma += aib[i];
		i -= lsb(i);
	}
	return suma;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	freopen("datorii.in", "r", stdin);
	freopen("datorii.out", "w", stdout);
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; ++i) {
		int a;
		cin >> a;
		add(i, a, n, aib);
	}
	for (int i = 1; i <= m; ++i) {
		int query;
		cin >> query;
		if (query == 0) {
			int pos, val;
			cin >> pos >> val;
			add(pos, -val, n, aib);
		}
		else if (query == 1) {
			int sta, fin;
			cin >> sta >> fin;
			cout << sum(fin, aib) - sum(sta - 1, aib) << "\n";
		}
	}
	return 0;
}