Cod sursa(job #766156)

Utilizator iris88Nagy Aliz iris88 Data 10 iulie 2012 14:40:11
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int bsearch(int x,vector<int> &a)
{
	int i = 0;
	int j = a.size();
	while (i<j-1)
	{
		int middle = i+(j-i)/2;
		if (a[middle]>x)
			j=middle;
		else 
			i=middle;
	}
	if (a[i]==x)
		return i;
	else return -2;
}
int bsearchgreater(int x,vector<int> &a)
{
	int i = 0;
	int j = a.size();
	while (i<j-1)
	{
		int middle = i+(j-i)/2;
		if (a[middle]<=x)
			i=middle;
		else 
			j=middle;
	}
	return i;
}
int bsearchsmaller(int x,vector<int> &a)
{
	int i = 0;
	int j = a.size();
	while (i<j-1)
	{
		int middle = i+(j-i)/2;
		if (a[middle]<x)
			i=middle;
		else 
			j=middle;
	}
	return j;
}
int main()
{

	ifstream f("cautbin.in");
	ofstream g("cautbin.out");
	int n;
	f>>n;
	vector<int> a(n);
	for (int i=0;i<n;i++)
	{
		f>>a[i];
	}
	int t;
	f>>t;
	for (int i=0;i<t;i++)
	{
		int res =0;
		int x,type;
		f>>type>>x;
		switch (type){
			case 0:res = bsearch(x,a);break;
			case 1:res = bsearchgreater(x,a);break;
			case 2:res = bsearchsmaller(x,a);break;
			default:break;
		}
		g<<res+1<<endl;
	}
	g.close();
	f.close();
	return 0;
}