Cod sursa(job #786557)

Utilizator DenisONIcBanu Denis Andrei DenisONIc Data 11 septembrie 2012 16:31:53
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");
long n,m,i,st,dr,mij,x,t,nr;
long v[100000]; 
int main()
{
	f>>n;
	for (i=1;i<=n;i++)
		f>>v[i];
	f>>m;
	for (i=1;i<=m;i++)
	{
		f>>t>>x;
		if (t==0)
		{
			st=1;
			mij=n/2;
			dr=n;
			while (st<mij)
			{
				if (v[mij]<=x)
				{
					st=mij;
					mij=(dr+st)/2;
				}
				else
				{
					dr=mij;
					mij=(dr+st)/2;
				}
			}
			if (v[mij]==x)
				g<<mij<<'\n';
			else
				g<<"-1"<<'\n';
		}
		if (t==1)
		{
			st=1;
			mij=n/2;
			dr=n;
			while (st<mij)
			{
				if (v[mij]<=x)
				{
					st=mij;
					mij=(st+dr)/2;
				}
				else
				{
					dr=mij;
					mij=(dr+st)/2;
				}
			}
			if (v[dr]>x)
				g<<mij<<'\n';
			else
				g<<dr<<'\n';
		}
		if (t==2)
		{
			st=1;
			mij=n/2;
			dr=n;
			while (dr>mij)
			{
				if (v[mij]>=x)
				{
					dr=mij;
					mij=(dr+st+1)/2;
				}
				else
				{
					st=mij;
					mij=(dr+st+1)/2;
				}
			}
			g<<mij<<'\n';
		}
	}
	f.close();
	g.close();
	return 0;
}