Cod sursa(job #667658)

Utilizator loredanacosteaCostea Loredana loredanacostea Data 23 ianuarie 2012 16:29:09
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include<fstream>
using namespace std;
int n,a[100001],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;
			}