Cod sursa(job #644673)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 7 decembrie 2011 12:17:09
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <stdio.h>

#define MAXN 20000

int Aib[MAXN], F[MAXN];
int N,M;
int i,tip,x,y;

inline void add(int poz, int val)
{
	for (; poz <= N; poz += F[poz])
		Aib[poz] += val;
}

inline int sum(int poz)
{
	int suma = 0;
	for (; poz; poz -= F[poz])
		suma += Aib[poz];
	return suma;
}

int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	
	scanf("%d %d",&N,&M);
	F[1] = 1;
	for (i=2; i<=N; ++i)
		if (i & 1)
			F[i] = 1;
		else
			F[i] = F[i>>1] << 1;
	
	for (i=1; i<=N; ++i){
		scanf("%d",&x);
		add(i, x);
	}
	
	for (i=1; i<=M; ++i){
		scanf("%d %d %d",&tip, &x, &y);
		if (tip == 0)
			add(x, -y);
		else
			printf("%d\n", sum(y)-sum(x-1));
	}
	
	return 0;
}