Cod sursa(job #1746559)

Utilizator irinapatularuPatularu Irina irinapatularu Data 23 august 2016 16:01:41
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>

#define NMAX 100001

using namespace std;
int n, m, vector[NMAX];
int mode, value;

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

int cautbin01(int leftt, int rightt, int position){
	int middle = leftt + (rightt - leftt) / 2;

	if(leftt == rightt){
		if(vector[middle] == value)
			position = middle;
		return position;
	}

	if(vector[middle] == value){
		position = middle;
		return cautbin01(middle + 1, rightt, position);
	}
	else{
		if(vector[middle] < value){
			if(mode == 1)
				position = middle;
			return cautbin01(middle + 1, rightt, position);
		}

		else{
			return cautbin01(leftt, middle - 1, position);
		}
	}
}
int cautbin2(int leftt, int rightt, int position){
	int middle = leftt + (rightt - leftt) / 2;

	if(leftt == rightt){
		if(vector[middle] >= value)
			position = middle;
		return position;
	}

	if(vector[middle] >= value){
		position = middle;
		return cautbin2(leftt, middle - 1, position);
	}
	else{
		return cautbin2(middle + 1, rightt, position);
	}
}
void solve(){
	
	f >> m;
	for(int i = 0; i < m; i++){
		f >> mode >> value;

		if(mode == 0 || mode == 1){
			g << cautbin01(0, n - 1, -1) + 1 << "\n";
		}
		
		if(mode == 2){
			g << cautbin2(0, n - 1, value) + 1 << "\n";
		}
	}
}

int main(){
	
	f >> n;
	for(int i = 0; i < n; i++)
		f >> vector[i];
	solve();

	f.close();
	g.close();
	return 0;	
}