Cod sursa(job #2159583)

Utilizator crisana stanescu cris Data 11 martie 2018 01:24:15
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
#define c 100001
using namespace std;

int a[c], n;

int task0(int x) {
	int ls = 1, ld = n, r = -1, m;
	while (ls <= ld)  {
		m = (ls + ld)/2;
		if (x == a[m]) {
			r = m;
		}
		if (x >= a[m]) 
				ls = 1 + m;
		else 
			if (x <= a[m]) 
				ld = m -1;
	}	
	return r;
}

int task1(int x) {
	int ls = 1, ld = n, poz, m;
	while (ls <= ld)  {
		m = (ld + ls)/2;
		if (x >= a[m]) {
			ls = m + 1;
			poz = m;
		}
		else
			if (x <= a[m]) {
				ld = m -1;
			}
	}
	return poz ;

}

int task2(int x) {
	int ls, ld, poz, m;
	ls = 1;
	ld = n;
	while (ls <= ld)  {
		
		m = (ls + ld)/2;
		if (x <= a[m]) {
			ld = m-1;
			poz = m;
		}
		else
			if (x >= a[m]) 
				ls = m +1 ;
	}	
	return poz ;

}

int main() {

int m, nr, x;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
f >> n;
for (int i = 1; i <= n; i++) {
	f >> a[i];
}
f >> m;
for (int i=1; i <= m; i++) {
	f >> nr >> x;
	switch(nr) {
	case 0: 
		g << task0(x) << '\n';
		break;
	case 1:
		g << task1(x) << '\n';
		break;
	case 2:
		g << task2(x) << '\n';
		break;
	}
}
	
f.close();
g.close();
return 0;
}