Cod sursa(job #531654)

Utilizator alexdmotocMotoc Alexandru alexdmotoc Data 10 februarie 2011 00:07:24
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
# include <iostream>
# include <fstream>
using namespace std;

int task1 (int x[100005] , int a , int n)
{
	int st = 1 , dr = n , mij;
	
	while (st < dr - 1)
	{
		mij = (st + dr) / 2;
		if (x[mij] == a)
			st = mij;
		else if (x[mij] < a)
			st = mij + 1;
		else dr = mij - 1;
	}
	
	if (x[st] == a)
		return st;
	else if (x[dr] == a)
		return dr;
	return -1;
}
int task2 (int x[100005] , int a , int n)
{
	int st = 1 , dr = n , mij;
	
	while (st < dr - 1)
	{
		mij = (st + dr) / 2;
		if (x[mij] <= a)
			st = mij;
		else dr = mij - 1;
	}
	
		
	if (x[dr] <= a)
		return dr;
	return st;
}
int task3 (int x[100005] , int a , int n)
{
	int st = 1 , dr = n , mij;
	
	while (st < dr)
	{
		mij = (st + dr) / 2;
		
		if (x[mij] < a)
			st = mij + 1;
		else dr = mij;
	}
	
	return st;
}
int main()
{
	ifstream f ("cautbin.in");
	ofstream g ("cautbin.out");
	
	int x[100005] , n , m , nr , task;
	
	f >> n;
	for (int i = 1 ; i <= n ; ++i)
		f >> x[i];
	f >> m;
	for (int i = 1 ; i <=m ; ++i)
	{
		f >> task >> nr;
		
		if (task == 0)
			g << task1 (x , nr , n) << "\n";
		else if (task == 1)
			g << task2 (x , nr , n) << "\n";
		else g << task3 (x , nr , n) << "\n";
	}
	return 0;
}