Cod sursa(job #1875618)

Utilizator xtreme77Patrick Sava xtreme77 Data 11 februarie 2017 13:11:29
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
#include <cmath>
#include <vector>

using namespace std ;

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

vector < int > v ;

int TypeOne (int val) 
{
	int st = 1 ; 
	int dr = (int)v.size() - 1 ; 
	int found = 0 ;
	while ( st <= dr ){
		int mij = (st + dr) / 2 ;
		if ( v[mij] > val ) {
			dr = mij - 1 ;
		}
		else {
			st = mij + 1 ; 
			found = mij ; 
		}
	}
	if (found != 0 and v[found] == val) {
		return found ;
	}
	return -1 ;
}

int TypeTwo (int val) 
{
	int st = 1 ; 
	int dr = (int)v.size() - 1 ;
	int found = 0 ; 
	while ( st <= dr ) {
		int mij = (st + dr) >> 1 ;
		if ( v[mij] > val ) {
			dr = mij - 1 ;
		}
		else {
			st = mij + 1 ; 
			found = mij ;
		}
	}
	return found ;
}

int TypeThree (int val)
{
	int st = 1 ;
	int dr = (int)v.size() - 1 ;
	int found = 0 ;
	while (st <= dr) {
		int mij = (st + dr) >> 1 ;
		if ( v[mij] >= val ) {
			dr = mij - 1 ;
			found = mij ;
		}
		else {
			st = mij + 1 ; 
		}
	}
	return found ; 
}

int main()
{
	int n ;
	cin >> n ; 
	v.resize(n+1) ;
	for (int i = 1 ; i <= n; ++ i) {
		cin >> v[i] ;
	}
	int m ; 
	cin >> m ; 
	while ( m -- ) {
		int tip ;
		cin >> tip ; 
		if (tip == 0) {
			int val ;
			cin >> val ; 
			cout << TypeOne(val) << '\n' ; 
		}
		else if (tip == 1) {
			int val ; 
			cin >> val ;
			cout << TypeTwo(val) << '\n' ;
		}
		else {
			int val ;
			cin >> val ;
			cout << TypeThree(val) << '\n' ;
		}
	}
	
	return 0 ;
}