Cod sursa(job #2272134)

Utilizator arosearose red arose Data 29 octombrie 2018 18:43:23
Problema Cautare binara Scor 60
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>

int cautare_binara(int vector[], int lo, int hi, int caz, int val)
{
	if (lo<=hi) {
		int med = lo + (hi-lo)/2;
		if (val<vector[med])
		{
			return cautare_binara(vector,lo,med-1,caz,val);
		}
		else if (val>vector[med])
		{
			return cautare_binara(vector,med+1,hi,caz,val);
		}
		else {
			if (caz==0) {
				if (vector[med+1]==val) return cautare_binara(vector,med+1,med+1,caz,val);
				return med;
			}
			if (caz==1)
			{
				if (vector[med+1]>val && vector[med-1]<val) return med;
			}
			if (caz==2)
			{
				if (vector[med-1]<val && vector[med+1]>val) return med;
			}
		}
	}
	if (caz==2)
		return lo;
	if (caz==1)
		return hi;
	return -2;
}

int main()
{
	FILE *inptr = fopen("cautbin.in","r");
	FILE *outptr = fopen("cautbin.out","w");

	int nr = 0;
	fscanf(inptr,"%d", &nr);
	int vector[nr];
	for (int i=0;i<nr;i++)
	{
		fscanf(inptr,"%d ", &vector[i]);
	}
	int cases = 0;
	fscanf(inptr,"%d", &cases);
	int c, val;


	while (cases>0)
	{
		fscanf(inptr,"%d %d", &c, &val);
		fprintf(outptr,"%d\n", cautare_binara(vector, 0, nr-1, c, val)+1);

		cases--;
	}
	
	return 0;
}