Cod sursa(job #199204)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 17 iulie 2008 15:06:41
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
int t,x,n,v[100000];
int search3(){
	long p=1,u=n,m;
	while (u!=p){
		m=(p+u)/2+1;
		if (v[m]==x)
			return m;
		if (v[m]>x)
			u=m;
		if (v[m]<x)
			p=m+1;
	}
	if (v[u]==x)
		return u;
	if (v[p]==x)
		return p;
	return u;
}
int search2(){
	long p=1,u=n,m;
	while (u-p>1){
		m=(p+u)/2-1;
		if (v[m]==x)
			return m;
		if (v[m]>x)
			u=m;
		if (v[m]<x)
			p=m+1;
	}
	if (v[p]==x)
		return p;
	if (v[u]==x)
		return u;
	return p;
}
int search1(){
	long p=1,u=n,m;
	while (u!=p){
		m=(p+u)/2;
		if (v[m]==x)
			return m;
		if (v[m]>x)
			u=m;
		if (v[m]<x)
			p=m+1;
	}
	return -1;
}
void write(int i){
	printf("%d\n",i);
}
void read(){
	scanf("%d%d",&t,&x);
	if (t==0)
		write(search1());
	else if (t==1)
		write(search2());
	else if (t==2)
		write(search3());
}
int main(){
	int i,m;
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	scanf("%d",&n);
	for (i=1;i<=n;++i)
		scanf("%d",&v[i]);
	scanf("%d",&m);
	for (i=1;i<=m;++i){
		read();
		//write(solve());
	}	
}