Cod sursa(job #563692)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 25 martie 2011 18:54:18
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
# include <fstream.h>
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");
int n, m, a[100005], i, t, X, val;
int bs1 (int find, int c){
	int i, nr = val;
	for (i = 1; nr > 0; nr >>= 1){
		if (a[i + nr] <= find){
			i += nr;
		}
	}
	if (c == 0){
		if (a[i] == find)
			return i;
		return -1;
	}
	return i;
}
int bs2 (int find){
	int i, nr = val;
	for (i = n; nr > 0; nr >>= 1){
		if (a[i - nr] >= find){
			i -= nr;
		}
	}
	return i;
}
int main (){
	f >> n;
	for (val = 1; val <= n; val <<= 1);
	for (i = 1; i <= n; ++i)
		f >> a[i];
	for (f >> m, val >>= 1; m > 0; --m){
		f >> t >> X;
		if (t < 2)
			g << bs1 (X, t);
		else
			g << bs2 (X);
		g << '\n';
	}
	g.close ();
	return 0;
}