Cod sursa(job #1857663)

Utilizator SpiristulTeribilStefan Vilcu SpiristulTeribil Data 26 ianuarie 2017 15:27:06
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>

using namespace std ;

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

const int MAX = 1e5 + 14 ;

int v [MAX] ;

int TypeOne ( int n , int x ){
	int st = 1 ; 
	int dr = n ;
	int sol = -1 ; 
	while ( st <= dr ) {
		int mij = ( st + dr ) / 2 ; 
		if ( v [mij] < x ) {
			st = mij + 1 ; 
		}
		else if ( v [mij] > x ) {
			dr = mij - 1 ; 
		}
		else {
			sol = mij ; 
			st = mij + 1 ; 
		}
	}
	return sol ; 
}

int TypeTwo ( int n , int x ) 
{
	int st = 1 ; 
	int dr = n ; 
	int sol ;
	while ( st <= dr ) {
		int mij = ( st + dr ) / 2 ;
		if ( v [mij] <= x ) {
			st = mij + 1 ; 
			sol = mij ; 
		}
		else {
			dr = mij - 1 ; 
		}
	}
	return sol ; 
}

int TypeThree ( int n , int x ) 
{
	int st = 1 ; 
	int dr = n ; 
	int sol = 1 ; 
	while ( st <= dr ) {
		int mij = ( st + dr ) / 2 ; 
		if ( v [mij] < x ) {
			st = mij + 1 ;
			sol = mij ; 
		}
		else {
			dr = mij - 1 ; 
		}
	}
	if ( v [sol] < x ) {
		++ sol ;
	}
	return sol ; 
}
int main ()
{
	int n ; 
	cin >> n ; 
	for ( int i = 1 ; i <= n ; ++ i ) {
		cin >> v [i] ; 
	}
	int m ;
	cin >> m ; 
	while ( m -- ) {
		int tip ; 
		cin >> tip ; 
		if ( tip == 0 ) {
			int x ;
			cin >> x ; 
			cout << TypeOne ( n , x ) << '\n' ; 
		}
		else if ( tip == 1 ) {
			int x ;
			cin >> x ; 
			cout << TypeTwo ( n , x ) << '\n' ; 
		}
		else {
			int x ;
			cin >> x ; 
			cout << TypeThree ( n , x ) << '\n' ; 
		}
	}
	return 0 ; 
}