Cod sursa(job #921226)

Utilizator beldeabogdanBogdan Beldea beldeabogdan Data 20 martie 2013 20:58:33
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#define ciudatenia(a) (a&(a-1))^a
using namespace std;
 
int n,m;
int arb[15001];
 
void modifica(int a,int val) {
    while (a<=n){
        arb[a] += val;
        a += ciudatenia(a);
    }
}
 
int datorie(int a,int b) {
    int s = 0;
    while (b>0) {
        s += arb[b];
        b -= ciudatenia(b);
    }
    while (a>0) {
        s -= arb[a];
        a -= ciudatenia(a);
    }
    return s;
}
 
int main() {
    freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
    scanf("%d %d",&n,&m);
    for (int i=1;i<=n;i++) {
		int a;
        scanf("%d",&a);
        modifica(i,a);
    }
    for (int i=1;i<=m;i++) {
		int a,b,tip;
        scanf("%d %d %d",&tip,&a,&b);
        if (tip == 0) modifica(a,-b);
        else if (tip == 1) printf("%d\n",datorie(a-1,b));
    }
    return 0;
}