Cod sursa(job #1497436)

Utilizator AlexandraaaaMereu Alexandra Alexandraaaa Data 6 octombrie 2015 20:07:50
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define maxN 15005 * 3

using namespace std;

int A[maxN];

void update(int l, int r, int i, int p, int v){
	if (l == r){
		A[i] += v;
		return;
	}
	int m = (l + r) / 2;
	if (m >= p)
		update(l, m, i * 2, p, v);
	else
		update(m + 1, r, i * 2 + 1, p, v);
	A[i] = A[i * 2] + A[i * 2 + 1];
}

void vezi(int l, int r, int a, int b, int i, int &S){
	if (l >= a && r <= b){
		S += A[i];
		return;
	}
	int m = (l + r) / 2;
	if (m >= a)vezi(l, m, a, b, i * 2, S);
	if (m < b)vezi(m + 1, r, a, b, i * 2 + 1, S);
}

int main(){
	ifstream f("datorii.in");
	ofstream g("datorii.out");

	int n, m;

	f >> n >> m;
	for (int i = 1; i <= n; ++i){
		int x;
		f >> x;
		update(1, n, 1, i, x);
	}

	for (int i = 0; i < m; ++i){
		int x, y, z;
		f >> x >> y >> z;
		if (x == 0) {
			z *= (-1);
			update(1, n, 1, y, z);
		}
		else{
			int s = 0;
			vezi(1, n, y, z, 1, s);
			g << s << "\n";
		}
	}

	f.close();
	g.close();

	return 0;
}