Cod sursa(job #820897)

Utilizator radupetriselPetrisel Radu radupetrisel Data 21 noiembrie 2012 12:43:23
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <cstdio>

long long v[100005];
int search0 (int l, int r, int k){
	int mid=(l+r)/2;
	if (r-l>1){
		if (k<v[mid]) return search0 (l, mid, k);
			else return search0 (mid, r, k);}
	
	if (l==-1 || v[l]!=k) return -1;
		else return l;		
}

int search1 (int l, int r, int k){
	int mid=(l+r)/2;
	if (r-l>1){
		if (k<v[mid]) return search1 (l, mid, k);
			else return search1 (mid, r, k);
	}
	
	return l;
}

int search2 (int l, int r, int k){
	int mid=(l+r)/2;
	if (r-l>1){
		if (k>=v[mid]) return search2 (mid, r, k);
			else return search2 (l, mid, k);
	}
	
	return r;
}


int main (){

	freopen ("cautbin.in", "r", stdin);
	freopen ("cautbin.out", "w", stdout);
	
	int n, m;
	scanf ("%d", &n);
	
	for (int i=1; i<=n; i++)
		scanf ("%lld", &v[i]);
	
	scanf ("%d", &m);
	
	int q, k;
	for (int i=1; i<=m; i++){
		scanf ("%d %d", &q, &k);
		if (q==0) printf ("%d\n", search0 (0, n+1, k));
		if (q==1) printf ("%d\n", search1 (0, n+1, k));
		if (q==2) printf ("%d\n", search2 (0, n+1, k));
	}
	
	return 0;
}