Cod sursa(job #476289)

Utilizator a.stanciuStanciu Adrian a.stanciu Data 10 august 2010 16:09:06
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#include <stdlib.h>

int bs0(int *v, int x, int a, int b)
{
	int c;
	while (a <= b)
	{
		c = (a + b) / 2;
		if (v[c] <= x)
			a = c + 1;
		else b = c - 1;	
	}

	c = (a + b) / 2;
	if (v[c] > x) c--;
	if (v[c] == x) return c;
	return -1;
}

int bs1(int *v, int x, int a, int b)
{
	int c;
	while (a < b)
	{
		c = (a + b) / 2;
		if (v[c] <= x)
			a = c + 1;
		else b = c;
	}

	c = (a + b) / 2;
	if (v[c] > x) c--;
	return c;
}

int bs2(int *v, int x, int a, int b)
{
	int c;

	while (a < b)
	{
		c = (a + b) / 2;
		if (v[c] < x)
			a = c + 1;
		else b = c;
	}

	c = (a + b) / 2;
	if (v[c] < x) c--;
	return c;
}

int main()
{
	FILE *f, *g;
	int n, m, i, op, x;
	
	f = fopen("cautbin.in", "r");
	fscanf(f, "%d", &n);

	int *v = (int *)malloc(sizeof(int) * (n + 1));
	
	for (i = 1; i <= n; i++)
		fscanf(f, "%d", &v[i]);

	fscanf(f, "%d", &m);

	g = fopen("cautbin.out", "w");

	for (i = 0; i < m; i++)
	{
		fscanf(f, "%d", &op);
		fscanf(f, "%d", &x);
		if (op == 0) fprintf(g, "%d\n", bs0(v, x, 1, n));
		if (op == 1) fprintf(g, "%d\n", bs1(v, x, 1, n));
		if (op == 2) fprintf(g, "%d\n", bs2(v, x, 1, n));
	}

	fclose(f);
	fclose(g);

	return 0;
}