Cod sursa(job #360116)

Utilizator stanesealexStanese Alex stanesealex Data 29 octombrie 2009 21:23:25
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include<cstdio>
using namespace std;

int a[10000];

int caut0(int st,int dr, int y)
{
	int mid;
	mid=(st+dr)/2;
	if (mid==st)
		return st;
	else
		if (a[mid]<=y)
			return caut0(mid,dr,y);
		else
			return caut0(st,mid,y);
}

int caut1(int st,int dr, int y)
{
	int mid;
	mid=(st+dr)/2;
	if (mid==st)
		return st;
	else
		if (a[mid]<=y)
			return caut0(mid,dr,y);
		else
			return caut0(st,mid,y);
}

int caut2(int st,int dr, int y)
{
	int mid;
	mid=(st+dr)/2;
	if (mid==st)
		return st;
	else
		if (a[mid]<y)
			return caut0(mid,dr,y);
		else
			return caut0(st,mid,y);
}

int main()
{
	int n,m,st,dr,x,y,i,rez;
	FILE *f=fopen("cautbin.in","r");
	FILE *g=fopen("cautbin.out","w");
	fscanf(f,"%d ",&n);
	for (i=1;i<=n;i++)
		fscanf(f,"%d ",&a[i]);
	fscanf(f,"%d ",&m);
	for (i=1;i<=m;i++)
	{
		fscanf(f,"%d %d",&x,&y);
		st=1;
		dr=n;
		if (x==0)
		{
			rez=caut0(st,dr,y);
			if (a[rez]==y)
			{fprintf(g,"%d ",rez);
			fprintf(g,"\n");}
			else
			{	fprintf(g,"%d ",-1);
			fprintf(g,"\n");}
		}
		if (x==1)
		{
			rez=caut1(st,dr,y);
			fprintf(g,"%d ",rez);
			fprintf(g,"\n");
		}
		if (x==2)
		{
			rez=caut2(st,dr,y);
			fprintf(g,"%d ",rez);
			fprintf(g,"\n");
		}
	}
	fclose(f);
	fclose(g);
	return 0;
}