Cod sursa(job #368751)

Utilizator titusuTitus C titusu Data 25 noiembrie 2009 19:13:03
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
using namespace std;
int n,a[100001];
inline int f0(int x){
	int st=1,dr=n,rez = -1,m;
	while(st<=dr){
		m = st+(dr-st)/2;
		if(a[m]<x)
				 st = m+1;
		else
			if( a[m] > x)
				dr= m-1;
			else
				return m;
	}
	return rez;
}
inline int f1(int x){
	int st=1,dr=n,rez,m;
	while(st<=dr){
	  m = st+(dr-st)/2;
		if(a[m]<=x)
			rez = m, st= m+1;
		else
			dr = m-1;
	}
	return rez;
}
inline int f2(int x){
	int st=1,dr=n, rez , m;
	while(st<=dr){
		m =st+(dr-st)/2;
		if(a[m]>=x)
			rez = m , dr = m-1;
		else
			st = m+1;

	}
	return rez;
}
int main(){
	FILE * fin=fopen("cautbin.in","r");
	fscanf(fin,"%d",&n);
	for(int i=1;i<=n;i++)
		fscanf(fin,"%d",a+i);
	int m;
	fscanf(fin,"%d", &m);
	FILE * fout= fopen("cautbin.out","w");
	for( ; m ; --m){
		int c,x;
		fscanf(fin, "%d%d", &c, &x);
		switch(c){
			case 0:fprintf(fout,"%d\n",f0(x));break;
			case 1:fprintf(fout,"%d\n",f1(x));break;
			case 2:fprintf(fout,"%d\n",f2(x));break;
		}
	}
	return 0;
}