Cod sursa(job #282429)

Utilizator MBlueGheorghevici Mihai MBlue Data 17 martie 2009 17:22:29
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#define dim 100010
int n,out,m,i,x,s,d,o,op,v[dim];

	FILE *f=fopen("cautbin.in","r");
	FILE *g=fopen("cautbin.out","w");

void citeste() {
	fscanf(f,"%d",&n);
	for (i=1;i<=n;i++)
		fscanf(f,"%d",&v[i]);
	fscanf(f,"%d",&o);
}

void o0() {
	out = -1;
	s = 1;
	d = n;
	while (s <= d) {
		m = s+(d-s)/2;
		if (x > v[m])
			s = m+1;
		else if (x < v[m])
			d = m-1;
		else {
			s = d+1;
			out = m;
		}
	}
	fprintf(g,"%d\n",out);
}

void o1() {
	s = 1;
	d = n;
	while (s <= d) {
		m = s+(d-s)/2;
		if (x >= v[m]){
			out = m;
			s = m+1;
		}
		else
			d = m-1;
	}
	fprintf(g,"%d\n",out);

}

void o2() {
	s = 1;
	d = n;
	while (s <= d) {
		m = s+(d-s)/2;
		if (x <= v[m]){
			out = m;
			d = m-1;
		}
		else
			s = m+1;
	}
	fprintf(g,"%d\n",out);

}

int main() {

	citeste();
	for (i=1;i<=o;i++) {
		fscanf(f,"%d %d",&op,&x);
		if (op==0)  o0();

		if (op==1) o1();

		if (op==2) o2();

	}

	fclose(f);
	fclose(g);

	return 0;
}