Cod sursa(job #464787)

Utilizator milijrCristian Militaru milijr Data 21 iunie 2010 18:47:27
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<fstream>
using namespace std;
int cautbin(int a[],int n,int x)
{
	int st=1,dr=n,med;
	while(st<=dr)
	{
		med=(st+dr)/2;
		if(a[med]==x)
			return med;
		else
			if(a[med]>x)
				dr=med-1;
			else
				st=med+1;
	}
	return med;
}
int main()
{
	int n,a[100005],m,op,i,bla,x,b;
	ifstream fin("cautbin.in");
	ofstream fout("cautbin.out");
	fin>>n;
	for(i=1;i<=n;i++)
		fin>>a[i];
	fin>>m;
	for(bla=1;bla<=m;bla++)
	{
		fin>>op>>x;
		b=cautbin(a,n,x);
		switch(op)
		{
		case 0:
			if(a[b]==x)
			{
				while(a[b]==x)
					b++;
				fout<<b-1<<endl;
			}
			else
				fout<<"-1"<<endl;
			break;
		case 1:	
			while(a[b]<=x)
				b++;
			fout<<b-1<<endl;
			break;
		case 2:
			while(a[b]>=x)
				b--;
			fout<<b+1<<endl;
			break;
		}
	}
}