Cod sursa(job #731852)

Utilizator MutescuMutescu Alexandru Mutescu Data 9 aprilie 2012 12:25:04
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<cstdio>
using namespace std;
long long int x,m,b,c,d,f,i,g,k,l,n,val,a[100000];
int lol(int x,int y,int z){
	 long int medie;
	 while (x<=y){
		 medie=(x+y)/2;
		 if(a[medie]<=z)
			 x=medie+1;
		 else
			y=medie-1;}
	 medie=(x+y)/2;
	 if(a[medie]>z)
		 medie--;
	 if(a[medie]==z)
		 return medie;
	 return -1;}
int lol1(int x,int y,int z){
	 long int medie;
	 while (x<y){
		  medie=(x+y)/2;
		 if(a[medie]<=z)
			 x=medie+1;
		 else
			y=medie-1;}
		medie=(x+y)/2;
		if(a[medie]>z)
		 medie--;
		
		return medie;}
		
int lol2(int x,int y,int z){
	 long int medie;
	 while (x<y){
		  medie=(x+y)/2;
		 if(a[medie]>=z)
			 y=medie-1;
		 else
			x=medie+1;}
		medie=(x+y)/2;
		if(a[medie]<z)
		 medie++;
		
		return medie;}
int main(){
	freopen ("cautbin.in","r",stdin);
	freopen ("cautbin.out","w",stdout);
	scanf("%lld ",&n);
	
	for(i=1;i<=n;i++)
	scanf("%lld ",&a[i]);
	scanf("%lld ",&m);
	while(m--){
		scanf("%lld %lld",&i ,&val);
		if(i==0)
			printf("%lld\n",lol(1,n,val));
		if(i==1)
			printf("%lld\n",lol1(1,n,val));
		if(i==2)
			printf("%lld\n",lol2(1,n,val));
	}
	return 0;}