Cod sursa(job #564207)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 26 martie 2011 21:52:05
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
#define NMAX 100005

using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int a[NMAX], n, m;

int cauta1 (int x)
{
	int st=1, dr=n, mij, ok=-1;
	while (st<=dr)
	{
		mij=(st+dr)/2;
		if (a[mij]==x) ok=mij, st=mij+1;
		else if (a[mij]<x) st=mij+1;
			else dr=mij-1;
	}
	return ok;
}

int cauta2 (int x)
{
	int st=1, dr=n, mij, ok=1;
	while (st<=dr)
	{
		mij=(st+dr)/2;
		if (a[mij]>x) dr=mij-1;
		else ok=mij, st=mij+1;
	}
	return ok;
}

int cauta3 (int x)
{
	int st=1, dr=n, mij, ok=m;
	while (st<=dr)
	{
		mij=(st+dr)/2;
		if (a[mij]<x) st=mij+1;
		else ok=mij, dr=mij-1;
	}
	return ok;
}

void Citeste()
{
	int i, x, op;
	f>>n;
	for (i=1; i<=n; ++i) f>>a[i];
	f>>m;
	while (m--)
	{
		f>>op>>x;
		if (op==0) g<<cauta1(x);
		else if (op==1) g<<cauta2(x);
		else g<<cauta3(x);
		g<<"\n";
	}
}

int main()
{
	Citeste();
	
	f.close();
	g.close();
	return 0;
}