Cod sursa(job #703190)

Utilizator runnerbloodVoda Alexandru-Ioan runnerblood Data 2 martie 2012 11:21:27
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
#include<iostream>
using namespace std;

ifstream in ("cautbin.in");
ofstream out ("cautbin.out");
int v[100000], N;

void citeste(int N) {
	for (int i=1; i<=N; i++)
		in >> v[i];
}

int caut0(int val)
{
	int i,pas=1<<16;
	for(i=0 ; pas!=0 ; pas/=2)
		if(i+pas<=N && v[i+pas]<=val) 
			i+=pas;
	if(v[i]==val) return i;
	return -1;
}

int caut1(int val) {
	int i,pas=1<<16;
	for(i=0 ; pas!=0 ; pas/=2)
		if(i+pas<=N && v[i+pas]<=val)
			i+=pas;
	if(v[i]<=val) return i;
}

int caut2(int val) {
	int i,pas=1<<16;
	for(i=0 ; pas!=0 ; pas/=2)
		if(i+pas<=N && v[i+pas]<val)
			i+=pas;
	return 1+i;
}

int main() {
	int M, x, y;
	in >> N;
	citeste (N);
	in >> M;
	
	for (int i=1; i<=M; i++) {
		in >> y >> x;
		if (y==0) out << caut0(x) << "\n";
		if (y==1) out << caut1(x) << "\n";
		if (y==2) out << caut2(x) << "\n";
	}
	return 0;
}