Cod sursa(job #875192)

Utilizator mads2194FMI - Andrei Stroe mads2194 Data 9 februarie 2013 19:50:40
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<cstdio>
#include<vector>
#include<queue>

#define N 100001

short int v[N];
int n,m;

#define maxp 1<<20

long long suma(int a, int b)
{
	long long s=0;
	for(int i=a;i<=b;++i)
		s+=v[i];	
	return s;
}


int find(long val)
{
	long pas=maxp,i;
	int temp;
	for(i=n;pas>0;pas>>=1)
	{
		temp = i-pas;
		if(temp>0 && suma(1,temp)>=val)
				i-=pas;
	}
	if(suma(1,temp)==val) return -1;
	return i;
}

int main()
{
	freopen("aib.in","r",stdin);
	freopen("aib.out","w",stdout);
	
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;++i)
		scanf("%hd",&v[i]);
	
	int a,b;
	while(m--)
	{
		scanf("%d",&a);
		if(a==2)
		{
			scanf("%d",&b);
			printf("%d\n",find(b));
		}
		else if(a==1)
		{
			scanf("%d %d",&a,&b);
			printf("%lld \n",suma(a,b));
		}
		else
		{
			scanf("%d %d",&a,&b);
			v[a]+=b;
		}
	}
	
	return 0;
}