Cod sursa(job #953994)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 27 mai 2013 22:42:44
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
using namespace std;
const int MAXN=100001;
int v[MAXN];
int n,m;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int search(int x,int opt)
{
	int st=1,dr=n,mij,poz=0,i;
	while (st<=dr)
	{
		mij=st+(dr-st)/2;
		if (v[mij]==x)
		{
			poz=mij;
			break;
		}
		if (x<v[mij])
			dr=mij-1;
		else if (x>v[mij])
			st=mij+1;
	}
	if (!opt)
	{
		if (poz)
		{
			for (i=poz+1;i<=n && v[i]==v[poz];++i);
			--i;
			poz=i;
		}
	}
	else if (opt==1)
	{
		if (poz)
		{
			for (i=poz+1;i<=n && v[i]==v[poz];++i);
			--i;
			poz=i;
		}
		else
			poz=dr;
	}
	else if (opt==2)
	{
		if (poz)
		{
			for (i=poz-1;i<=n && v[i]==v[poz];--i);
			++i;
			poz=i;
		}
		else
			poz=st;
	}
	return poz;
}

int main()
{
	int i,opt,x;
	fin>>n;
	for (i=1;i<=n;++i)
		fin>>v[i];
	fin>>m;
	for (i=0;i<m;++i)
	{
		fin>>opt>>x;
		fout<<search(x,opt)<<'\n';
	}
	fin.close();
	fout.close();
	return 0;
}