Cod sursa(job #775846)

Utilizator cameleonGeorgescu Dan cameleon Data 9 august 2012 10:08:11
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
using namespace std;
#define NMAX 100005
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int a[NMAX],n,m;
int find0(int x)
{
	int p=1,u=n,gasit=0;
	while (p<=u)
	{
		int mij=(p+u)/2;
		if(a[mij]==x)p=mij+1,gasit=1;
			else
			if(a[mij]<x)p=mij+1;
			else u=mij-1;
	}
	if(gasit)return (p-1);
	return -1;
}
int find1(int x)
{
	int p=1,u=n;
	while (p<=u)
	{
		int mij=(p+u)/2;
		if(a[mij]<=x)p=mij+1;
		else u=mij-1;
	}
	return p-1;
}
int find2(int x)
{
	int p=1,u=n;
	while (p<=u)
	{
		int mij=(p+u)/2;
		if(a[mij]>=x)u=mij-1;
			else
			p=mij+1;
			
	}
	
	return u+1;
}
int main()
{
	f>>n;
	for(int i=1;i<=n;++i)
		f>>a[i];
	f>>m;
	for(int i=1;i<=m;++i)
	{
		int op,x;
		f>>op>>x;
		switch(op)
		{
		case 0:g<<find0(x)<<'\n';break;
		case 1:g<<find1(x)<<'\n';break;
		case 2:g<<find2(x)<<'\n';break;
		}
		
	}
}