Cod sursa(job #1161845)

Utilizator nickulNic Kul nickul Data 31 martie 2014 14:48:49
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include<fstream>
#include<vector>

using namespace std;

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

int main()
{
	int n,m,i,j,p=1,tip,val;
	vector<int> v;
	in>>n;
	v.resize(n);
	while(p<n) p<<=1;
	for(i=0;i<n;i++) in>>v.at(i);
	in>>m;
	while(m--)
	{
		in>>tip>>val;
		j=p;
		i=0;
		while(j)
		{
			if(i+j<n&&v.at(i+j)<=val) i+=j;
			j>>=1;
		}
		if(tip==0)
		{
			if(v.at(i)==val) out<<i+1<<'\n';
			else out<<"-1\n";
		}
		if(tip==1) out<<i+1<<'\n';
		if(tip==2) 
		{
			if(v.at(i)==val) while(i>1&&v.at(i-1)==val) i--;
			if(v.at(i)<val) i++;
			out<<i+1<<'\n';
		}
	}
}