Cod sursa(job #973439)

Utilizator cosmo0093Raduta Cosmin cosmo0093 Data 14 iulie 2013 15:43:21
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>

int absearch(int *a, int l, int r, int caut)
{
	int m;
	while(l <= r)
	{
		m = l + (r - l) / 2;
		if(a[m] <= caut)
			l = m + 1;
		else
			r = m - 1;
	}
	m = l + (r - l) / 2;
	if(a[m] > caut) m--;
	if(a[m] == caut) return m;
	return -1;
}

int bbsearch(int *a, int l, int r, int caut)
{
	int m;
	while(l < r)
	{
		m = l + (r - l) / 2;
		if(a[m] <= caut)
			l = m + 1;
		else
			r = m;
	}
	m = l + (r - 1) / 2;
	if(a[m] > caut) m--;
	return m;
}

int cbsearch(int *a, int l, int r, int caut)
{
	int m;
	while(l < r)
	{
		m = l + (r - l) / 2;
		if(a[m] < caut)
			l = m + 1;
		else
			r = m;
	}
	m = l + (r - l) / 2;
	if(a[m] < caut) m++;
	return m;
}

int main(void)
{
	int nV, nM, *nA, a, b;
	std::ifstream in("cautbin.in");
	std::ofstream out("cautbin.out");
	in >> nV;
	nA = new int[nV];
	for(int i(0); i < nV; i++)
		in >> nA[i];
	in >> nM;
	for(int i(0); i < nM; i++)
	{
		in >> a >> b;
		if(a == 0) out << absearch(nA, 0, nV - 1, b) << "\n";
		if(a == 1) out << bbsearch(nA, 0, nV - 1, b) << "\n";
		if(a == 2) out << cbsearch(nA, 0, nV - 1, b) << "\n";
	}
	return 0;
}