Cod sursa(job #536575)

Utilizator icepowdahTudor Didilescu icepowdah Data 18 februarie 2011 20:12:34
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>
using namespace std;

#define NMAX 100001
int n, m, A[NMAX];

int answer12(int val, int type) {
	int step, i;
	for (step=1;step<n;step<<=1);
	for (i=0;step;step>>=1) {
		if (i+step <= n && A[i+step] <= val) {
			i+=step;
		}
	}
	if (type == 1 || A[i] == val) return i;
	return -1;
}

int answer3(int val) {
	int i, step;
	for (step=1;step<n;step<<=1);
	for (i=n;step;step>>=1) {
		if (i-step > 0 && A[i-step]>=val) {
			i-=step;
		}
	}
	return i;
}

int main() {
	int i, type, x, res;
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	scanf("%d",&n);
	for (i=1;i<=n;i++) {
		scanf("%d",&A[i]);
	}
	scanf("%d",&m);
	for (i=1;i<=m;i++) {
		scanf("%d %d",&type,&x);
		if (type < 2) {
			res = answer12(x,type);
		}
		else res = answer3(x);
		printf("%d\n",res);
	}
	return 0;
}