Cod sursa(job #1454346)

Utilizator PetruZZatic Petru PetruZ Data 26 iunie 2015 11:01:31
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>

using namespace std;

int a[100005];
int n,m,i,x;

int cauta(int in, int x)
{
int s,d,m;

if (in==0)
{

	s=0; d=n; m=(s+d)/2;
	while ((a[m]!=x)&&(s!=d))
	{
	if (x>a[m]) 
			{
			s=m+1; m=s+(d-s)/2;
			}
	if (x<a[m])
			{
			d=m; m =s+(d-s)/2;
			}
	}
	if(a[m]!=x) return(-1); 
	else
	{
	while(a[m]==x) m++;
	return(m);
	}
}

if (in==1)
{

	s=0; d=n; m=(s+d)/2;
	while ((a[m]!=x)&&(s!=d))
	{
	if (x>a[m]) 
			{
			s=m+1; m=s+(d-s)/2;
			}
	if (x<a[m])
			{
			d=m; m=s+(d-s)/2;
			}
	}
	if(a[m]!=x) return(m); 
	else
	{
	while(a[m]==x) m++;
	return(m);
	}
}
if (in==2)
{

	s=0; d=n; m=(s+d)/2;
	while ((a[m]!=x)&&(s!=d))
	{
	if (x>a[m]) 
			{
			s=m+1; m=s+(d-s)/2;
			}
	if (x<a[m])
			{
			d=m; m=s+(d-s)/2;
			}
	}
	if(a[m]!=x) return(m+1); 
	else
	{
	while(a[m]<x) m--;
	return(m+1);
	}
}

}


int main ()
{
	ifstream cin("cautbin.in");
    ofstream cout("cautbin.out");
 
    ios_base::sync_with_stdio(0);
	
	cin >> n; 
	
	for (i=0; i<n; i++) cin >> a[i];
	
	cin >> m;
	int indice;
	for (i=0; i<m; i++) 
	{
	cin >> indice >> x;
	cout << cauta(indice,x) << "\n";
	}
	
	
return 0;
}