Cod sursa(job #1040174)

Utilizator antonioteoZait Teodor Antonio antonioteo Data 24 noiembrie 2013 00:39:49
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>
using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

#define NMAX 100001
#define VMAX 1 << 30

int i, N, M;
int c, x;
int cnt;

int v[NMAX];

int main() {
	fin >> N;
	for (i = 1; i <= N; ++i) 
		fin >> v[i];
	fin >> M;
	while (M--) {
		fin >> c >> x;
		if (c == 2) {
			for (i = N, cnt = VMAX; cnt; cnt >>= 1) 
				if (i - cnt >= 0 && v[i - cnt] >= x)
					i -= cnt;
			fout << i << '\n';
			continue;
		}
		for (i = 0, cnt = VMAX; cnt; cnt >>= 1) 
			if (i + cnt <= N && v[i + cnt] <= x)
				i += cnt;
		if (!c && v[i] != x) 
			fout << -1 << '\n';
		else
			fout << i << '\n';
	}
	return 0;
}