Cod sursa(job #942434)

Utilizator ShadoWolfCodrut Constantin Gusoi ShadoWolf Data 22 aprilie 2013 16:43:35
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>
#include <limits>
using namespace std;

long v[100001]; 
ifstream in("cautbin.in");
ofstream out("cautbin.out");

long search_exact(long x,long ls,long ld,long mode);
int main()
{
    long n,a,b,m,c;
	in>>n;
    in.ignore(numeric_limits<streamsize>::max(),'\n');
    for(int i=0;i<n;++i)
    {
        in>>v[i];
    }
	in>>m;
	in.ignore(numeric_limits<streamsize>::max(),'\n');
	for(int i=0;i<m;++i)
    {
        in>>a>>b;
        in.ignore(numeric_limits<streamsize>::max(),'\n');
		c=search_exact(b,0,n-1,a);
		out<<c<<'\n';
    }
    in.close();
    out.close();
    return 0;
}

long search_exact(long x,long ls,long ld,long mode)
{
	long mid=(ls+ld)/2;
	if (ls==ld) 
	{
		switch (mode)
		{
			case 0:
				if (x==v[mid])
				{
					while(v[mid]==x)
						mid++;
					return mid+1;
				}
				return -1;
				break;
			case 1:
				return mid+1;
				break;
			case 2:
				return mid+2;
				break;
			default:
				return 0;
		}
	}
	if (x==v[mid])
	{
		switch (mode)
		{
			case 0:
			case 1:
				while(v[mid]==x)
					mid++;
				return mid;
				break;
			case 2:
				while(v[mid]==x)
					mid--;
				return mid+2;
				break;
			default:
				return 0;
		}
	}
	else if (x<v[mid])
	{
		return search_exact(x,ls,mid-1,mode);
	}
	else
	{
		return search_exact(x,mid+1,ld,mode);
	}
	return -1;
}