Cod sursa(job #1009714)

Utilizator suntunprostGhinoiu Dragos suntunprost Data 13 octombrie 2013 18:16:02
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.67 kb
#include <fstream>

using namespace std;

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

int cautbin0(int v[100000] , int min , int max , int x ) {
	
	int mid ;
	
	while (min < max) {
		
		mid = (min + max) / 2;
		
		if(v[mid] <= x)
			min = mid + 1;
		
		else
			max = mid - 1;
	}
	
	mid = (max + min) / 2;
	
	if(v[mid] > x)
		--mid;
	if(v[mid] == x)
		return mid;
	
	else return -1;
}

int cautbin1(int v[100000] , int min , int max , int x ) {
	
	int mid ;
	
	while (min < max) {
		
		mid = (min + max) / 2;
		
		if(v[mid] <= x)
			min = mid + 1;
		
		else
			max = mid;
	}
	
	mid = (min + max) / 2;
	
	if(v[mid] > x)
		--mid;
	return mid;
	
}

int cautbin2(int v[100000] , int min , int max , int x ) {
	
	int mid ;
	
	while (min < max) {
		
		mid = (min + max) / 2;
		
		if(v[mid] < x)
			min = mid + 1;
		
		else
			max = mid;
	}
	
	mid = (min + max) / 2;
	
	if(v[mid] < x)
		++mid;
	return mid;
	
}
int main() {
	
	int n , v[100000] , M , m1[100000] , m2[100000] , i , j;
	
	fin >> n; // numarul de valori din vector
	
	for( i = 1 ; i <= n ; i++)
		fin >> v[i];
	
	fin >> M; // numar de intrebari
	
	// pe linia 0 vor fi puse tipurile de intrebari 
	// pe linia 1 vor fi puse valorile de cautat
		for( j = 1 ; j <= M ; j++){
			fin >> m1[j];
			fin >> m2[j];
		}
	
	for(j = 1 ; j <= M ; j++) {
		
		if(m1[j] == 0)//fout << m2[j] << " ";
			fout << cautbin0(v , 0 , n , m2[j]) << "\n";
		
		else if(m1[j] == 1)//fout << m2[j] << " ";
			fout << cautbin1(v , 0 , n , m2[j]) << "\n";
		
		else //fout << m2[j] << " ";
			fout << cautbin2(v , 0 , n , m2[j]) << "\n";
	
	}
	
	return 0;
}