Cod sursa(job #505342)

Utilizator radu_bucurRadu Bucur radu_bucur Data 1 decembrie 2010 20:01:23
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>
int n, a[100001],mij, max, min, i, x, y, m;
int main(){
	freopen ("cautbin.in","r",stdin);
	freopen ("cautbin.out","w",stdout);
	scanf ("%d",&n);
	for(i=1;i<=n;i++) scanf ("%d",&a[i]);
	scanf ("%d",&m);
	for (i=1;i<=m;i++){
		scanf ("%d%d",&y,&x);
		min=1; max=n; mij=0;
		if (y==0){
			while (a[mij]!=x&&min<=max){
				mij=(min+max)/2;
				if (a[mij]<x){min=mij+1;}
				else {if (a[mij]>x){max=mij-1;}}}
			while (a[mij+1]==x) mij++;
			if (max<min) printf ("%d\n",-1);
			else printf ("%d\n",mij);}
		if (y==1){
			while (a[mij]>x&&min<=max){
				mij=(min+max)/2;
				if (a[mij]>x){max=mij-1;}}
		    while (a[mij+1]<=x)mij++;
				printf ("%d\n",mij);}
	if (y==2){
		     while (a[mij]<x&&min<=max){
				mij=(min+max)/2;
				if (a[mij]<x){min=mij+1;}}
		    while (a[mij-1]>=x) mij--;
				printf ("%d\n",mij);}}
	return (0);}