Cod sursa(job #886446)

Utilizator superman_01Avramescu Cristian superman_01 Data 22 februarie 2013 21:03:17
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<fstream>

#define NMAX 100005

using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,v[NMAX],m;
	int mid;
int x;
int search( int left, int right )
{
	while(left <= right)
	{
		mid=(left+right)/2;
		if( v[mid] <= x)
			left=mid+1;
		else
			right=mid-1;
		
		
	}
	if(v[mid] > x )
		--mid;
	if(v[mid] == x )
		return mid;
	return 0;
	
}
int search1(int left,int right)
{
	
	while(left <= right )
	{
		mid=(left+right)/2;
		if( v[ mid ]  >= x )
			left=mid+1;
		else
			right=mid;
		
	}
	if(v[mid]  > x)
		--mid;
	if( v[ mid] <= x)
		return mid;
	
	
	return 0;
	
	
}

int search2( int left,int right)
{
	
    while(left <= right )
	{
		mid=(left+right)/2;
		if(v[mid] >= x)
			left=mid+1;
	else
		right=mid;
		
	}
	
	if( v[mid] > x)
		return mid;
	return 0;
	
}


int main()
{
	f>>n;
	for(int i=1; i <= n ; i++)
    {
		f>>v[i];
		
	}
	
	sort(v,v+n);
	
	f>>m;
    int tip;
	
   
	while(m--)
	{
		
	   f>>tip>>x;
	   
	   int t;
        if( tip == 0 )		
			t=search( 1, n );
		else
			if( tip == 1)
				t=search1(1, n);
			else
				t=search2(1,n);
		g<<t<<"\n";
		
		
	}
	
	
	
	
}