Cod sursa(job #522050)

Utilizator cosminvdpruna stefan cosminvd Data 14 ianuarie 2011 10:22:49
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
using namespace std;

int n,a[100001],m,x,y;

int bin_search0(int st, int dr, int x)
{
	int mij;
	while(st <= dr)
	{
		mij = (st + dr) / 2;
		if(a[mij] <= x) 
			st = mij + 1;	
		else 
			dr = mij - 1;
	 	
	}
	mij = (st + dr) / 2;
	if(a[mij] > x)
		--mij;
	if(a[mij] == x)
		return mij;
	else return -1;
	
}

int bin_search1(int st, int dr, int x)
{
	int mij;
	while(st < dr)
	{
		mij = (st + dr) / 2;
		if(a[mij] <= x) st = mij + 1;
		else dr = mij;
	}
	mij = (st + dr) / 2;
	if(a[mij] > x)
		--mij;
	return mij;
}

int bin_search2(int st, int dr, int x)
{
	int mij;
	while(st < dr)
	{
		mij = (st + dr) / 2;
		if(a[mij] >= x) dr = mij;
		else st = mij + 1;
	}
	mij = (st + dr) / 2;
	if(a[mij] < x)
		++mij;
	return mij;
}

int main()
{
	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>>y>>x;
		if(y == 0)g<<bin_search0(1, n, x)<<'\n';
		else 
		if(y == 1)g<<bin_search1(1, n, x)<<'\n';
		else
		if(y == 2)g<<bin_search2(1, n, x)<<'\n'; 
	}
	f.close();
	g.close();
	return 0;
}