Cod sursa(job #2502212)

Utilizator maria_bMaria Burdila maria_b Data 30 noiembrie 2019 14:49:08
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#include <bits/stdc++.h>
 
int vv[10000], n, m, j, k;
 
int query(int n, int ll, int rr, int a, int b)
{
	if(a <= ll && rr <= b)
		return vv[n];
	int r = 0, middle = (ll+rr)/2;
	if(a <= middle)
		r += query(2*n, ll, middle, a, b);
	if(b > middle)
		r += query(2*n+1, middle+1, rr, a, b);
	return r;
}
 
void update(int n, int ll, int rr, int a, int b, int v)
{
	if(a <= ll && rr <= b) {
		vv[n] += v;
		return;
	}
	int middle = (ll+rr)/2;
	if(a <= middle)
		update(2*n, ll, middle, a, b, v);
	if(b > middle)
		update(2*n+1, middle+1, rr, a, b, v);
	vv[n] = vv[n*2]+vv[n*2+1];
}
 
int main()
{
	int i, a, b, d;
    freopen("datorii.in", "r", stdin);
	freopen("datorii.out", "w", stdout);
 
	scanf("%d %d", &n, &m);
 
	for(i = 1; i <= n; ++ i) {
		scanf("%d", &a);
		update(1, 1, n, i, i, a);
	}
	for(i = 1; i <=m; ++ i) {
		scanf("%d %d %d", &a, &b, &d);
		if(a==1) {
			int sum = query(1, 1, n, b, d);
			printf("%d\n", sum);
		}
		else { update(1, 1, n, b, b, -d); 
	}
}
	return 0;
}