Cod sursa(job #837677)

Utilizator krissu93FMI Tiugan Cristiana Elena krissu93 Data 18 decembrie 2012 14:19:37
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <iostream>
using namespace std;

ifstream in("cautbin.in");
ofstream out("cautbin.out");

int n,t;
int a[100000];

int caut0(int *a,int n,int x)
{
	int st=1;
	int dr=n;
	int m;
	while (dr>=st)
	{
		m=(dr+st)/2;
		if (x>=a[m])
		{
			st=m+1;
		}
		else
		if (x<=a[m])
		{
			dr=m-1;
		}
	}
	m=(st+dr)/2;
	if (a[m]==x) return m;
	else return -1;
}

int caut1(int *a,int n, int x)
{
	int st=1;
	int dr=n;
	int m;
	while (dr>=st)
	{
		m=(st+dr)/2;
		if (x>=a[m])
		{
			st=m+1;
		}
		else
		{
			dr=m-1;
		}
	}
	m=(st+dr)/2;
	return m;
}

int caut2(int *a,int n, int x)
{
	int st=1;
	int dr=n;
	int m;
	while (st<dr)
	{
		m=(st+dr)/2;
		if (x<=a[m])
			dr=m;
		else
			st=m+1;
	}
	m=(st+dr)/2;
	return m;
}
int main()
{
	int i;
	in>>n;
	for (i=1;i<=n;i++)
		in>>a[i];
	in>>t;
	for (i=1;i<=t;i++)
	{
		int val,x;
		in>>val>>x;
		if (val==0) out<<caut0(a,n,x)<<'\n';
		if (val==1) out<<caut1(a,n,x)<<'\n';
		if (val==2) out<<caut2(a,n,x)<<'\n';
	}
	return 0;
}