Cod sursa(job #587764)

Utilizator proflaurianPanaete Adrian proflaurian Data 5 mai 2011 20:03:19
Problema Arbori indexati binar Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<cstdio>
//#include<ctime>
#define N 1<<17
int n,q,i,x,v,w,k,s[N];
int main()
{
	//double start=(double)clock(),cps=(double)CLOCKS_PER_SEC,end;
	freopen("aib.in","r",stdin);
	freopen("aib.out","w",stdout);
	scanf("%d%d",&n,&q);w=N;w--;
	for(i=1;i<=n;i++)
	{
		scanf("%d",&x);
		for(v=i;v&w;){s[v]+=x;v+=(v&-v);}
	}
	for(;q;q--)
	{
		scanf("%d",&k);
		if(!k)
		{
			scanf("%d%d",&v,&x);
			for(;v&w;){s[v]+=x;v+=(v&-v);}
			continue;
		}
		if(k==1)
		{
			x=0;
			scanf("%d",&v);for(v--;v;){x-=s[v];v-=(v&-v);}
			scanf("%d",&v);for(;v;){x+=s[v];v-=(v&-v);}
			printf("%d\n",x);continue;
		}
		scanf("%d",&x);
		for(i=0,v=N;v&&x;v>>=1)
			if(i+v<=n&&x>=s[i+v])
				{i+=v;x-=s[i];}
		x?printf("-1\n"):printf("%d\n",i);
	}
	//end=(double)clock();
	//printf("%lf\n",(end-start)/cps);
	return 0;
}