Cod sursa(job #1022805)

Utilizator alexandru70Ungurianu Alexandru alexandru70 Data 5 noiembrie 2013 22:54:02
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <vector>
#include <iostream>

using namespace std;

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

vector<int> v;

int n;

int search(int x) {
	int hi = n, lo = -1,mid;
	while(hi-lo > 1) {
		mid = lo + (hi-lo)/2;
		if(v[mid] < x)
			lo = mid;
		else 
			hi = mid; 
	}
	
	return hi;
}

int search1(int x) {
	int i = search(x);
	cerr << i << '\n';
	if(i==n||v[i]!=x)return -1;
	while(v[++i]==x);
	return i;
}

int search2(int x) {
	int i = search(x);
	while(v[++i]<=x);
	return i;
}

int search3(int x) {
	int i = search(x);
	while(v[--i]>=x);
	return i+2;
}

int main() 
{
	in >> n;
	v.resize(n);
	for(int i = 0; i < n; ++i)
		in >> v[i];
	int m;
	in >> m;
	while(m--) {
		int t,x;
		in >> t >> x;
		switch(t) {
			case 0:out << search1(x) << '\n';break;
			case 1:out << search2(x) << '\n';break;
			case 2:out << search3(x) << '\n';break;
		}
	}
	return 0;
}