Cod sursa(job #911199)

Utilizator swim406Teudan Adina swim406 Data 11 martie 2013 13:49:36
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>
#define zeros(x) ( (x ^ (x - 1)) & x )

using namespace std;

int AIB[200], N, M;

void Add(int x, int quantity) {    
	int i;     
	for (i = x; i <= N; i += zeros(i))        
	AIB[i] += quantity;
} 

int Compute(int x){    
	int i, ret = 0;     
	for (i = x; i > 0; i -= zeros(i))        
		ret += AIB[i];    
	return ret;
}

int main() {
	freopen ("aib.in", "r", stdin);
	freopen ("aib.out", "w", stdout);
	int i, opt, a, b, x;
	scanf ("%d %d", &N, &M);
	for (i = 1; i <= N; ++i) {
		scanf ("%d", &x);
		Add(i, x);
	}
	for (i = 1; i <= M; ++i) {
		scanf ("%d", &opt);
		if (opt == 0) {
			scanf ("%d %d", &a, &b);
			Add (a, b);
		}
		if (opt == 1) {
			scanf ("%d %d", &a, &b);
			printf ("%d\n", Compute(b) - Compute(a-1));
		}
		if (opt == 2) {
			scanf ("%d", &a);
			b = 1;
			while (Compute(b) != a) ++b;
			printf ("%d\n", b);
		}
	}
	return 0;
}