Cod sursa(job #665075)

Utilizator loredanacosteaCostea Loredana loredanacostea Data 21 ianuarie 2012 17:02:54
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<fstream>
using namespace std;
int n,a[10000001],m,x,y;
int bin_search0(int st,int dr,int x)
{
	int mij;
	while(st<=dr)
	{
		mij=(st+dr)/2;
		if(a[mij]<=x)
			st=mij+1;
		else
			dr=mij-1;
	}
	mij=(st+dr)/2;
	if(a[mij]>x)
		--mij;
	if(a[mij]==x)
		return mij;
	else
		return -1;
}
int bin_search1(int st,int dr,int x)
{
	int mij;
	while(st<dr)
	{
		mij=(st+dr)/2;
		if(a[mij]<=x)
		st=mij+1;
		else
			dr=mij;
	}
	mij=(st+dr)/2;
	if(a[mij]>x)
		--mij;
	return mij;
}
int bin_search2(int st,int dr,int x)
{
	int mij;
	while(st<dr)
	{
		mij=(st+dr)/2;
		if(a[mij]<=x)
		dr=mij;
		else
			st=mij+1;
	}
	mij=(st+dr)/2;
	if(a[mij]<x)
		++mij;
	return mij;
}
		
		int main()
		{
			ifstream f("cautbin.in");
			ofstream g("cautbin.out");
			f>>n;
			for(int i=1;i<=n;++i)
				f>>a[i];
			f>>m;
			for(int i=1;i<=m;++i)
			{
				f>>y>>x;
			if(y==0)
				g<<bin_search0(1,n,x)<<"\n";
			if(y==1)
				g<<bin_search1(1,n,x)<<"\n";
			if(y==2)
				g<<bin_search2(1,n,x)<<"\n";
			}
		return 0;
		}