Cod sursa(job #1220593)

Utilizator ariel_roAriel Chelsau ariel_ro Data 17 august 2014 19:44:47
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define NX 15010

int N, M, A[NX], VAL, K;

void create(int poz) 
{
	if (K == 1) {
		A[poz] += VAL;
	} else {
		A[poz] -= VAL;
	}

	int C = 0;
	while (poz < N)
	{
		while (!(poz & (1 << C))) C++;
		poz += 1 << C;
		if (K == 1) {
			A[poz] += VAL;
		} else {
			A[poz] -= VAL;
		}

		C += 1;
	}
}

int query(int right)
{
	int sum = 0, C = 0;
	while (right > 0)
	{
		sum += A[right]; 
		while (!(right & (1 << C))) C++;
		right -= 1 << C;
	}
	
	return sum;
}

int main()
{
	freopen("datorii.in", "r", stdin);
	freopen("datorii.out", "w", stdout);

	scanf("%d %d", &N, &M);
	
	K = 1;

	int elem = 0;
	for (int i = 1; i <= N; i++)
	{
		scanf("%d", &elem);

		VAL = elem;
		create(i);
	}

	K = 0;

	int cod = 0, a = 0, b = 0;
	for (int i = 1; i <= M; i++)
	{
		scanf("%d %d %d", &cod, &a, &b);

		switch (cod)
		{
		case 0:
			VAL = b;
			create(a);
			break;
		case 1:
			printf("%d\n", query(b) - query(a - 1));	
			break;
		}
	}

}