Cod sursa(job #211017)

Utilizator kiaraFugaru Sabina kiara Data 30 septembrie 2008 13:04:52
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<stdio.h>
int cauta( int *v, int p, int u, int x){
	if(p==u){
		if(x==v[p])
			return p;
		else
			return -1;
	}
	if(x<=v[(p+u)/2])
		return cauta(v,p,(p+u)/2,x);
	return cauta(v,(p+u)/2+1,u,x);
}
int cauta2( int *v, int p, int u, int x){
	if(p==u){
		if(v[p]<=x)
			return p;
		else
			return p-1;
	}
	if(x<=v[(p+u)/2])
		return cauta2(v,p,(p+u)/2,x);
	return cauta2(v,(p+u)/2+1,u,x);
}
int cauta3( int *v, int p, int u, int x){
	if(p==u){
		if(v[p]>=x)
			return p;
		else
			return p+1;
	}
	if(x<=v[(p+u)/2])
		return cauta3(v,p,(p+u)/2,x);
	return cauta3(v,(p+u)/2+1,u,x);
}
int main(){
	int v[100000],n,i,x,m,j,intr;
	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(j=0;j<m;j++){
		scanf("%d",&intr);
		scanf("%d",&x);
		if(intr==0)
			printf("%d\n",cauta(v,1,n,x));
		if(intr==1)
			printf("%d\n",cauta2(v,1,n,x));
		if(intr==2)
			printf("%d\n",cauta3(v,1,n,x));
	}
	return 0;
}