Cod sursa(job #1025423)

Utilizator bughybv31bogdan bughybv31 Data 9 noiembrie 2013 22:22:57
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
int a[100],n;
int cautare0(int st, int dr, int x)
{
	int mij;
	while (st <= dr)
	{
		mij = (st + dr)/2;
		if (a[mij] <= x)
			st = mij + 1;
		else
			dr = mij - 1;
	}
	mij = (st + dr)/2;
	if (a[mij] == x)
		return mij;
	return -1;
}
int cautare1(int st, int dr, int x)
{
	int mij;
	while (st <= dr)
	{
		mij = (st + dr)/2;
		if (a[mij] <= x)
			st = mij + 1;
		else
			dr = mij - 1;
	}
	mij = (st + dr)/2;
	return mij;
}
int cautare2(int st, int dr, int x)
{
	int mij;
	while (st < dr)
	{
		mij = (st + dr)/2;
		if (a[mij] < x)
			st = mij + 1;
		else
			dr = mij - 1;
	}
	mij = (st + dr)/2;
	if (a[mij] == x)
		return mij;
	return mij-1;
		
}
int main()
{
	freopen ("cautbin.out","w",stdout);
	freopen ("cautbin.in","r",stdin);
	scanf ("%d",&n);
	for (int i = 0 ; i < n ; ++i)
		scanf ("%d ",&a[i]);
	int nri;
	scanf("%d",&nri);
	for (int i = 0 ; i < nri ; ++i)
	{
		int in,x;
		scanf("%d %d\n",&in,&x);
		if (in == 0)
			printf("%d\n",cautare0(0,n-1,x));
		if (in == 1)
			printf("%d\n",cautare1(0,n-1,x));
		if (in == 2)
			printf("%d\n",cautare2(0,n-1,x));
	}
	return 0;
}