Cod sursa(job #661976)

Utilizator angi.nNeata Angelica angi.n Data 15 ianuarie 2012 17:29:18
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include<stdlib.h>
#include<fstream>
#include<iostream>


using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int cautare0(int *v,int n,int x)
{
	int a=0,b=n-1,mij=(a+b)/2;
	while(a<=b)
	{
		if(v[mij]<=x)
			a=mij+1;
		else
			b=mij-1;
		mij=(a+b)/2;
	}
	if(v[mij]>x)
		mij--;
	if(v[mij-1]==x)
		return mij+1;
	else
		return -1;
}
int cautare1(int *v,int n,int x)
{
	int a=0,b=n-1,mij=(a+b)/2;
	while(a<b)
	{
		if(v[mij]<=x)
			a=mij+1;
		else
			b=mij;
		mij=(a+b)/2;
	}
	if(v[mij]>x)
		return mij;
	else
		return mij+1;
}
int cautare2(int *v,int n,int x)
{
	int a=0,b=n-1,mij=(a+b)/2;
	while(a<b)
	{
		if(v[mij]<x)
			a=mij+1;
		else
			b=mij;
		mij=(a+b)/2;
	}
	if(v[mij]>x)
		return mij+1;
	else
		return mij;
}
int main()
{
	int *v,n,i,m,opt,x;
	in>>n;
	//alocarea vectorului de n elemente
	v=( int *)malloc(n*sizeof( int ));
	for(i=0;i<n;i++)
		in>>v[i];
	in>>m;
	for(i=0;i<m;i++)
	{
		in>>opt;
		in>>x;
		if(opt==0)
			out<<cautare0(v,n,x)<<"\t";
		else
			if(opt==1)
				out<<cautare1(v,n,x)<<"\t";

			else
				out<<cautare2(v,n,x)<<"\t";
	}
	//eliberare memorie
	free(v);
	in.close();
	out.close();
	return 0;
}