Cod sursa(job #1415728)

Utilizator ArkinyStoica Alex Arkiny Data 5 aprilie 2015 23:18:20
Problema Arbori indexati binar Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream>
#include<iostream>
using namespace std;
#define MAX 150001

int N,M,v[MAX],bit[MAX];

ifstream in("aib.in");
ofstream out("aib.out");

void update(int p,int val)
{
	int ind=p;
	while(ind<=N)
	{
		bit[ind]+=val;
		ind +=ind&(-ind);
	}
}
int getSum(int e)
{
	int ind=e,s=0;
	while(ind>0)
	{
		s+=bit[ind];
		ind-=ind&(-ind);
	}
	return s;
}

int minK(int a)
{
	int i=1;
	while(i<=N)
	{
		if(getSum(i)==a)
			return i;	
		i++;
	}
	return -1;
}
int main()
{
	in>>N>>M;
	int op,a,b;
	for(int i=1;i<=N;i++)
	{
		in>>v[i];
		update(i,v[i]);
	}
	for(int j=1;j<=M;j++)
	{
		in>>op;
		switch(op)
		{
		case 0:
			in>>a>>b;
			update(a,b);
			break;
		case 1:
			in>>a>>b;
			if(a==b)
			  out<<v[a]<<'\n';
			else
			 out<<(getSum(b)-getSum(a)) + v[a]<<'\n';
			break;
		case 2:
			in>>a;
			out<<minK(a)<<'\n';
			break;
		}
	}
	return 0;
}