Cod sursa(job #1005181)

Utilizator lucky1992Ion Ion lucky1992 Data 4 octombrie 2013 14:25:14
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int binarySearch1(int* a, int left, int right, int x ){

	int rez,rez1;
	if( left > right )
		return -1;
	else{
		int mid = left + ( right-left)/2;
		if( a[mid] == x ){
			 rez = mid;
			 rez1 = binarySearch1(a, mid+1, right,x);
		}
		else if( x < a[mid] )
			return binarySearch1( a, left, mid-1, x );
		else
			return binarySearch1( a, mid+1, right, x);
	}
	
		return rez < rez1 ? rez1 : rez ;
}

int binarySearch2( int* a, int left, int right ,int x ){

	int rez,rez1;
		if( left > right )
			return -1;
		else{
			int mid = left + (right-left)/2;
			if( a[mid] <= x ){
				rez = mid;
				rez1 = binarySearch2( a, mid+1, right, x );
			}
			else
				return binarySearch2( a, left, mid-1, x );
		}
		
		return rez < rez1 ? rez1 : rez;
}

int binarySearch3( int* a, int left, int right, int x){

	int rez, rez1;
		if( left  > right )
			return left;
		else{
			int mid = left + (right-left)/2;
			if ( a[mid] >= x ){
				rez = mid;
				rez1 = binarySearch3( a, left, mid-1, x );
			}
			else
				return binarySearch3( a, mid+1, right , x );
		}
		
		return rez < rez1 ? rez : rez1 ;

}
int main(){
	
	int N, M, *a, cod, x;
	in >> N;
	a = new int[N];
	for( int i = 0 ; i < N; i++ )
		in >> a[i];
	in >> M;
	
	for( int i = 0; i < M; i++ ){
		in >> cod >> x;
		if( cod == 0 )
			out<< binarySearch1( a, 0, N-1, x)+1<<endl;
		else if( cod == 1 )
			out<< binarySearch2( a, 0, N-1, x)+1<<endl;
		else
			out<< binarySearch3( a, 0, N-1, x)+1<<endl;
	}
	
	return 0;
	
}