Cod sursa(job #1338748)

Utilizator MariusMarinescuMarius Marinescu MariusMarinescu Data 10 februarie 2015 12:37:03
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int s(int start,int end,int x,short v[100])
{
	if(start>end)
		return -1;
	int mid=(start+end)/2;
	if(v[mid]==x)
	{
		while(v[mid]==x)
			mid++;
		mid--;
		return mid;
	}
	if(v[mid]>x)
		return s(1,mid-1,x,v);
	if(v[mid]<x)
		return s(mid+1,end,x,v);
}
int d(int start,int end,int x,short v[100])
{
	if(start>end)
		return -1;
	int mid=(start+end)/2;

	if(v[mid]>=x)
	{
		return s(mid+1,end,x,v);
	}
	if(v[mid]<x)
		{
		while(v[mid]>=x)
			mid++;
		mid--;
		return mid;
	}
		
}
int q(int start,int end,int x,short v[100])
{
	if(start>end)
		return -1;
	int mid=(start+end)/2;

	if(v[mid]>x)
	{
		return s(1,mid-1,x,v);
	}
	if(v[mid]<=x)
	{
		while(v[mid]>x)
			mid++;
		mid--;
		return mid;
	}
}
int main()
{
	int n,i,x,t,m,a;
	short v[100];
	f>>n;
	for(i=1;i<=n;i++)
		f>>v[i];
	f>>m;
	for(i=1;i<=m;i++)
	{
		f>>t>>x;
		if(t==0)
		{
			g<<s(1,n,x,v)<<'\n';
		}
		if(t==1)
		{
			g<<d(1,n,x,v)<<'\n';
		}

		if(t==2)
		{
			g<<q(1,n,x,v)<<'\n';
		}
	}
	f.close();
	g.close();
	return 0;
}