Cod sursa(job #869363)

Utilizator noruIlies Norbert noru Data 1 februarie 2013 15:25:58
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,m,v[100001],maxim;
void citire(){
	f>>n;
	for (int i=1;i<=n;i++)
		f>>v[i];
}
void cautbin0(int x, int st,int dr)
{
	int mid;
	if (st<=dr&&st!=0)
	{
		mid=(st+dr)/2;
		if (st==dr&&v[mid]==x&&maxim<mid)
			maxim=mid;
		if (st<dr){cautbin0(x,st,mid);
		cautbin0(x,mid+1,dr);}
	}
}
void cautbin1(int x, int st,int dr)
{
	int mid;	
	if (st<=dr&&st!=0)
	{
		mid=(st+dr)/2;
		if (st==dr&&v[mid]<=x&&maxim<mid)
			maxim=mid;
		if (st<dr){cautbin1(x,st,mid);
		cautbin1(x,mid+1,dr);}
	}
}
void cautbin2(int x, int st,int dr)
{
	int mid;
	if (st<=dr&&st!=0)
	{	mid=(st+dr)/2;
		if (st==dr&&v[mid]>=x&&maxim>mid)
			maxim=mid;
		if (st<dr){cautbin2(x,st,mid);
		cautbin2(x,mid+1,dr);}
	}
}
int main()
{
	citire();
	f>>m;
	for (int i=1;i<=m;i++)
	{
		int q,x;
		f>>q>>x;
		if (q!=2) maxim=-1;
		else maxim=100001;
		if (q==0) cautbin0(x,1,n);
		else if (q==1) cautbin1(x,1,n);
		else cautbin2(x,1,n);
		g<<maxim<<'\n';
	}
	return 0;
}