Cod sursa(job #3125801)

Utilizator AlexandruIoan20Moraru Ioan Alexandru AlexandruIoan20 Data 4 mai 2023 15:30:54
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
using namespace std;
#define lung(x) ( (x^(x- 1)) & x )

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

int N, M, aib[15010]; 

void update(int poz, int val)
{
	for (int i = poz; i <= N + 1; i += lung(i))
		aib[i] += val;
}


int query(int poz) {
	int s = 0;
	for (int i = poz; i >= 1; i -= lung(i))
		s += aib[i];

	return s;
}

void operatie0(int poz, int val) {
	for (int i = poz; i <= N; i += lung(i))
		aib[i] -= val; 
}

void operatie1(int P, int Q) {
	fout << query(Q) - query(P - 1) << '\n'; 
}



int main() {
	fin >> N >> M; 

	for (int i = 1; i <= N; i++) {
		int x;
		fin >> x;
		update(i, x);
	}

	for (int i = 1; i <= M; i++) {
		int q;
		fin >> q;
		if (q == 0) {
			int T, V;
			fin >> T >> V;
			operatie0(T, V);
		}

		else if (q == 1) {
			int P, Q;
			fin >> P >> Q;
			operatie1(P, Q);
		}
	}; 

	fin.close(); 
	fout.close(); 
	
	return 0; 
}