Cod sursa(job #766160)

Utilizator iris88Nagy Aliz iris88 Data 10 iulie 2012 14:46:38
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 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-1;
		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()-1;
	while (i<j-1)
	{
		int middle = i+(j-i)/2;
		if (a[middle]<=x)
			i=middle;
		else 
			j=middle-1;
	}
	return i;
}
int bsearchsmaller(int x,vector<int> &a)
{
	int i = 0;
	int j = a.size()-1;
	while (i<j-1)
	{
		int middle = i+(j-i)/2;
		if (a[middle]<x)
			i=middle;
		else 
			j=middle-1;
	}
	return j;
}
int main()
{

	FILE *f=fopen("cautbin.in","r");
	FILE *g=fopen("cautbin.out","w+");
	int n;
	fscanf(f,"%d",&n);
	vector<int> a(n);
	for (int i=0;i<n;i++)
	{
		fscanf(f,"%d",&a[i]);
	}
	int t;
	fscanf(f,"%d",&t);
	for (int i=0;i<t;i++)
	{
		int res =0;
		int x,type;
		fscanf(f,"%d %d",&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;
		}
		fprintf(g,"%d\n",res+1);
	}
	fclose(g);
	fclose(f);
	return 0;
}