Cod sursa(job #1850240)

Utilizator andreiulianAndrei andreiulian Data 18 ianuarie 2017 13:14:44
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream> 
#include <fstream>
#include <cmath>
//#include <vector>
//#include <set>
#include <algorithm>
//#include <map>
//#include <cstring>
//#include <string>
//#include <queue>
 
#define mp make_pair
#define pb push_back
#define ff(i, x, n) for (int i = x; i <= n; ++i)
#define dd cout << 
#define nn << '\n'
#define ss << ' ' <<
#define z(x) ((x ^ (x - 1)) & x)
using namespace std;
int n, m, aib[15005];
void update(int x, int val) {
	do {
		aib[x] += val;
		x += z(x);
	} while (x <= n);
}
int ask(int x) {
	int r = 0;
	do {
		r += aib[x];
		x -= z(x);
	} while (x);
	return r;
}

int main(){
        //freopen("schi.in", "r", stdin);
        //freopen("schi.out", "w", stdout);
        ifstream in("datorii.in");
        ofstream out("datorii.out");
    int val, a, b, q;
    in >> n >> m;
    ff(i, 1, n) {
		in >> val;
		update(i, val);
	}
	ff(i, 1, m) {
		in >> q >> a >> b;
		if (q) {
			out << ask(b) - ask(a - 1) << '\n';
		} else {
			update(a, -b);
		}
	}
}