Cod sursa(job #206774)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 9 septembrie 2008 15:47:22
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>

const int N_MAX = 100010;

int N, v[N_MAX];

int bs(int val)
{
	int i, step;
	for (step = 1; step < N; step <<= 1);
	for (i = 0; step; step >>= 1) {
		if (i + step <= N && v[i + step] <= val) i += step;
	}
	
	return i;
}

int main()
{
	freopen("cautbin.in", "r", stdin);
#ifndef _SCREEN_
	freopen("cautbin.out", "w", stdout);
#endif

	int M, t, val;
	scanf("%d\n", &N);
	for (int i = 1; i <= N; i ++) {
		scanf("%d ", &v[i]);
	}
	scanf("%d\n", &M);
	for (int i = 1; i <= M; i ++) {
		scanf("%d %d\n", &t, &val);

		if (t == 0) {
			int poz = bs(val);
			if (v[poz] != val) printf("-1\n");
			else printf("%d\n", poz);
		}

		if (t == 1) {
			int poz = bs(val);
			printf("%d\n", poz);
		}

		if (t == 2) {
			int poz = bs(val);
			if (v[poz] >= val) printf("%d\n", poz);
			else printf("%d\n", poz + 1);
		}
	}

	return 0;
}