Cod sursa(job #659019)

Utilizator madmanjonesJones the one madmanjones Data 9 ianuarie 2012 22:02:30
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <stdio.h>

int v[100001],lung,nr,p,q;

int search1(int x,int a,int b);
int search2(int x,int a,int b);
int search3(int x,int a,int b);

int main()
{
	FILE* in=fopen("cautbin.in","r");
	fscanf(in,"%d\n",&lung);
	for(int i=1;i<=lung;++i)
		fscanf(in,"%d",&v[i]);
	fscanf(in,"\n%d\n",&nr);
	FILE *out=fopen("cautbin.out","w+");
	for(int i=1;i<=nr;++i)
	{
		fscanf(in,"%d%d\n",&p,&q);
		switch(p)
		{
			case 0: fprintf(out,"%d\n",search1(q,1,lung)); break;
			case 1: fprintf(out,"%d\n",search2(q,1,lung)); break;
			case 2: fprintf(out,"%d\n",search3(q,1,lung)); break;
		}
	}
	fclose(in);
	fclose(out);
return 0;
}

int search1(int x,int a,int b)
{
	if (a==b-1)
	{
		if (v[b]==x) return b;
		else if (v[a]==x) return a;
		else return -1;
	}
	int c=(a+b)/2;
	if (x<v[c]) return search1(x,a,c);
    else return search1(x,c,b);
}
int search2(int x,int a,int b)
{
	if (a==b-1)
	{
		if (v[b]<=x) return b;
		return a;
	}
	int c=(a+b)/2;
	if (x<v[c]) search2(x,a,c);
    else search2(x,c,b);

}
int search3(int x,int a,int b)
{
	if (a==b-1)
	{
		if (v[a]>=x) return a;
		return b;
	}
	int c=(a+b)/2;
	if (x<=v[c]) search3(x,a,c);
    else search3(x,c,b);
}