Cod sursa(job #805144)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 30 octombrie 2012 22:09:34
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>

int caut0(int *v, int n, int x)
{
	int stg=0, dpt=n-1, m;
	while (dpt >= stg)
	{
		m = (stg+dpt)/2;
		if (x >= v[m])
			stg = m+1;
		else
			dpt = m-1;
	}
	m = (stg+dpt)/2;
	if (v[m] == x) return m+1;
	return -1;
}

int caut1(int *v, int n, int x)
{
	int stg=0, dpt=n-1, m;
	while (dpt >= stg)
	{
		m = (stg+dpt)/2;
		if (x >= v[m])
			stg = m+1;
		else
			dpt = m-1;
	}
	m = (stg+dpt)/2;
	return m+1;
}

int caut2(int *v, int n, int x)
{
	int stg=0, dpt=n-1, m;
	while (dpt > stg)
	{
		m = (stg+dpt)/2;
		if (x <= v[m])
			dpt = m;
		else
			stg = m+1;
	}
	m = (stg+dpt)/2;
	return m+1;
}

int main()
{
	int v[100000], n, m, i, c, x;
	FILE *in = fopen("cautbin.in", "r");
	FILE *out = fopen("cautbin.out", "w");
	fscanf(in, "%d", &n);
	for (i=0;i<n;i++) fscanf(in, "%d", &v[i]);
	fscanf(in, "%d", &m);
	for (i=0;i<m;i++)
	{
		fscanf(in, "%d%d", &c, &x);
		switch (c)
		{
			case 0: fprintf(out, "%d\n", caut0(v, n, x)); break;
			case 1: fprintf(out, "%d\n", caut1(v, n, x)); break;
			case 2: fprintf(out, "%d\n", caut2(v, n, x)); break;
		}
	}
	fclose(in); fclose(out);
	return 0;
}