Cod sursa(job #656785)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 5 ianuarie 2012 11:52:46
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <algorithm>
#include <stdio.h>

using namespace std;

#define N_MAX 100001

int a[N_MAX];
int op, x, i, j, n, 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]);
	
	int LOG, log;
	for(LOG = 1; LOG < n; LOG <<= 1);
	
	scanf("%d", &m);
	for(i = 1; i <= m; i ++){
		scanf("%d %d", &op, &x);
		switch(op){
		case 0:
			for(log = LOG, j = 1; log; log >>= 1)
				if(j + log <= n && a[j + log] <= x)
					j += log;
			if(a[j] != x)
				printf("-1\n");
			else
				printf("%d\n", j);
			break;
		case 1:
			for(log = LOG, j = 1; log; log >>= 1)
				if(j + log <= n && a[j + log] <= x)
					j += log;
			printf("%d\n", j);
			break;
		case 2:
			for(log = LOG, j = 0; log; log >>= 1)
				if(j + log <= n && a[j + log] < x)
					j += log;
				printf("%d\n", j + 1);	
			break;
		}
	}
	return 0;
}