Cod sursa(job #411623)

Utilizator pykhNeagoe Alexandru pykh Data 5 martie 2010 00:32:48
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<stdio.h>
const char in[]="aib.in", out[]="aib.out";
int v[100005], n;

void add(int x, int val)
	{
		for(;x<=n;x += x & -x)
			v[ x ] += val;
}

int query(int x)
	{int sol=0;
		for(;x>0; x -= x & -x)
			sol += v[x];
	return sol;
	}

int search(int x)
	{int i, j;
		for(i=1; i <n; i <<= 1);
			for(j=0; i ; i >>= 1)
				if(j+i <= n)
					if(x >= v[j+i])
					{
						j +=i, x -= v[j];
						if(!x)return j;
					}
	return -1;
}		
	
int main()
	{
		freopen(in,"r",stdin);
		freopen(out,"w",stdout);
		int x, y, op, m;
		scanf("%d%d", &n, &m);
		for(int i=1;i<=n;++i)scanf("%d", &x), add(i, x);
		for(;m--;)
		{
			scanf("%d", &op);
			if(op<2)
			{
				scanf("%d%d", &x, &y);
				if(!op)add(x, y);
				else printf("%d\n", query(y)-query(x-1));
			}
			else scanf("%d", &x), printf("%d\n",search(x));
		}
		return 0;
}