Cod sursa(job #89943)

Utilizator the1dragonIonita Alexandru the1dragon Data 7 octombrie 2007 20:50:04
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>

int arb[32768];

void adauga(int unde, int val, int poz, int st, int dr)
{
	if ((unde>=st) && (unde<=dr))
		arb[poz]+=val;
	if (st==dr) return;
	adauga(unde, val, poz*2, st, (st+dr)/2);
	adauga(unde, val, poz*2+1, (st+dr)/2+1, dr);
	return;
}
int intreaba(int ST, int DR, int poz, int st, int dr)
{
	if ((ST>dr) || (DR<st))
		return 0;
	if ((ST<=st) &&(dr<=DR))
		return arb[poz];
	return intreaba(ST, DR, poz*2, st, (st+dr)/2) + intreaba(ST, DR, poz*2+1, (st+dr)/2+1, dr);
}

int main()
{
	freopen("datorii.in", "r", stdin);
	freopen("datorii.out", "w", stdout);
	int n, m, val, unde, st, dr, tip, i;
	scanf("%d%d", &n, &m);
	for (i=1; i<=n; i++)
	{
		scanf("%d", &val);
		adauga(i, val, 1, 1, n);
	}
	for (i=1; i<=m; i++)
	{
		scanf("%d", &tip);
		if (tip==0)
		{
			scanf("%d %d", &unde, &val);
			val*=-1;
//			adauga(unde, val, 1, 1, n);
		}
		else
		{
			scanf("%d %d", &st, &dr);
//			printf("%d\n", intreaba(st, dr, 1, 1, n)); 
		}
	}
	
}