Cod sursa(job #1649526)

Utilizator adu18sptAndrei Mircea adu18spt Data 11 martie 2016 14:00:22
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
unsigned n,m,v[100001],a,b,i,rez;

unsigned cautbin(unsigned val)
{
	unsigned step=1,index,start=0;
	
	for(;step<=n;step<<=1)
	
	for(;step;step>>=1)
	{
		index=start+step;
		if(index>n)
		continue;
		if(v[index]<=val)
		start=index;
	}
	
	return start;
	
}
int main()
{
	fin>>n;
	
	for(i=1;i<=n;i++)
		fin>>v[i];
		
	for(i=1;i<=m;i++)
	{
		fin>>a>>b;
		if(a==0)
		{
			rez=cautbin(b);
			if(v[rez]==b)
			{
				fout<<rez<<"\n";
			}
			else
			{
				fout<<-1<<"\n";
			}
		}
		else if(a==1)
		{
			rez=cautbin(b);
			fout<<rez<<"\n";
		}
		else
		{
			rez=cautbin(b-1)+1;
			fout<<rez<<"\n";
		}
	}
	
	return 0;
	
}