Cod sursa(job #706117)

Utilizator Stefex09Stefan Teodorescu Stefex09 Data 5 martie 2012 17:06:16
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
using namespace std;
int v[100100],n,m,i,tip,el;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int bs0(int x, int st, int dr)
{
	int m=((st+dr)>>1);
	while(st<=dr){
		m=((st+dr)>>1);
		if(v[m]<=x)
			st=m+1;
		else
			dr=m-1;
	}
	m=((st+dr)>>1);
	if(v[m]>x) --m;
	if(v[m]==x) 
		return m;
	return -1;
}
int bs1(int x, int st, int dr)
{
	int m=((st+dr)>>1);
	while(st<dr){
		m=((st+dr)>>1);
		if(v[m]<=x)
			st=m+1;
		else
			dr=m;
	}
	m=((st+dr)>>1);
	if(v[m]>x) --m;
	return m;
}
int bs2(int x, int st, int dr)
{
	int m=((st+dr)>>1);
	while(st<dr){
		m=((st+dr)>>1);
		if(v[m]<x)
			st=m+1;
		else
			dr=m;
	}
	m=((st+dr)>>1);
	if(v[m]<x)
		++m;
	return m;
}
int main()
{
	in>>n;
	for(i=1;i<=n;++i)
		in>>v[i];
	for(in>>m;m;--m){
		in>>tip>>el;
		if(tip==0)
			out<<bs0(el,1,n);
		if(tip==1)
			out<<bs1(el,1,n);
		if(tip==2)
			out<<bs2(el,1,n);
	}
	return 0;
}