Cod sursa(job #113805)

Utilizator raula_sanChis Raoul raula_san Data 11 decembrie 2007 17:53:31
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>

#define dim 30001

int N, M;
int T[dim];

void update(int n, int st, int dr, int p, int v)
{
	T[n] += v;
	
	if(st == dr)
		return;
	else
	{
		int m = (st + dr) >> 1;
		
		if(p <= m) update(n<<1, st, m, p, v);
		else update((n<<1)+1, m+1, dr, p, v);
	}
}

int querry(int n, int st, int dr, int a, int b)
{
	if(st == dr)
		return T[n];
	else
	{
		if(st >= a && dr <= b)
			return T[n];
		else
		{	
	
		int m = (st + dr) >> 1;
		int t = 0;
		
		if(a <= m) t += querry(n<<1, st, m, a, b);
		if(b > m) t += querry((n<<1)+1, m+1, dr, a, b);

		return t;
		
		}
	}
}

int main()
{
	freopen("datorii.in", "rt", stdin);
	freopen("datorii.out", "wt", stdout);
	
	int i, v, a, b, c;
	
	for(scanf("%d %d", &N, &M), i=1; i<=N; ++i)
	{
		scanf("%d", &v);
		
		update(1, 1, N, i, v);
	}

	for(i=1; i<=M; ++i)
	{
		scanf("%d %d %d", &a, &b, &c);
		
		if(!a)
			update(1, 1, N, b, -c);
		else
			printf("%d\n", querry(1, 1, N, b, c));
	}
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}