Cod sursa(job #840488)

Utilizator s4d1ckOrtan Seby s4d1ck Data 22 decembrie 2012 19:34:00
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <math.h>

#define MAX 100000
int v[MAX], n;

int cautare(int i, int j, int nr)
{
	if (i >= j) return -1;
	int ind = ceil((float) (i+j) / 2);
	if (v[ind] == nr) return ind;
	else if (v[ind] < nr) return cautare(ind, j, nr);
	else return cautare(i, ind, nr);
}


int main()
{
	int i, m, t, nr, p;
	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", &t, &nr);
		p = cautare(0, n-1, nr);
		//printf("p is %d \n", p);
		switch (t)
		{
			case 0:
				if (p != -1)
					while (v[p+1] == nr)
						p++;
				break;
			case 1:
				if (p != n-1) 
					while (v[p+1] == nr)
						p++;
				break;
			case 2:
			if (p != 0) 
				while (v[p-1] == nr)
					p--;
			break;		
		}
		fprintf(out, "%d\n", p+1);
	}
	fclose(in); fclose(out);
	
	return 0;
}