Cod sursa(job #912533)

Utilizator taigi100Cazacu Robert taigi100 Data 12 martie 2013 14:55:57
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<stdio.h>

int arb[100];
int n,l;

void adauga(int k,int val)
{
	int r=0;
    	while(k<=n)
		{
			arb[k]+=val;
			while(!(k&(1<<r)))r++;
			k+=1<<r;
			r++;
		}
}

int interogare(int k)
{
	int s=0,r=0;
	while(k>=1)
	{
		s+=arb[k];
		while(!(k&(1<<r)))r++;
		k-=1<<r;
		r++;
	}
	return s;
}

int search(int k)
{
	int val=1;
	while(val<=n)
	{
		if(arb[val]==k)
		{
			return val;
		}
		val*=2;
	}
	return -1;
}
int main()
{ 

	freopen("aib.in","r",stdin);
	freopen("aib.out","w",stdout);
	
	scanf("%d %d",&n,&l);
	int a,b;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a);
		adauga(i,a);
	}
	int c;
	for(int i=1;i<=l;i++)
	{
		scanf("%d",&a);
		if(a==0)
		{
			scanf("%d%d",&b,&c);
	       adauga(b,c);
		}
		else if(a==1)
		{
			scanf("%d%d",&b,&c);
		   printf("%d\n",interogare(c)-interogare(b-1));
		}
		else
		{
			scanf("%d",&b);
			printf("%d\n",search(b));
		}
	}
	
}