Cod sursa(job #419037)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 16 martie 2010 21:02:56
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
using namespace std;

#include<cstdio>

int v[100001],n,x;

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

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

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

int main ()
{
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	scanf("%d",&v[i]);
	int m;
	scanf("%d",&m);
	while(m){
		int tip;
		scanf("%d%d",&tip,&x);
		switch(tip){
			case 0:printf("%d\n",caut0());break;
			case 1:printf("%d\n",caut1());break;
			case 2:printf("%d\n",caut2());break;
			}
			--m;
		}
	return 0;
}