Cod sursa(job #420133)

Utilizator lamez0rBogdan Bondor lamez0r Data 18 martie 2010 16:02:43
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<stdio.h>

int n,v[100001],m,x;
FILE *f,*g;

int bsearch0 (int s, int d)
{
	int mij;
	while (s<=d)
	{
		mij=(s+d)/2;
		if (v[mij]<=x)
			s=mij+1;
		else
			d=mij-1;
	}
	mij=(s+d)/2;
	while (v[mij]>x)
		mij--;
	if (v[mij]==x)
		return mij;
	return -1;
}

int bsearch1(int s, int d)
{
	int mij;
	while (s<d)
	{
		mij=(s+d)/2;
		if (v[mij]<=x)
			s=mij+1;
		else
			d=mij;
	}
	mij=(s+d)/2;
	while (v[mij]>x)
		mij--;
	return mij;
}

int bsearch2 (int s, int d)
{	
	int mij;
	while (s<d)
	{
		mij=(s+d)/2;
		if (v[mij]<x)
			s=mij+1;
		else
			d=mij;
	}
	mij=(s+d)/2;
	while (v[mij]<x)
		mij++;
	return mij;
}

void read ()
{
	f=fopen("cautbin.in","r");
	g=fopen("cautbin.out","w");
	fscanf(f,"%d",&n);
	int i,tip;
	for (i=1;i<=n;++i)
		fscanf(f,"%d",&v[i]);
	fscanf(f,"%d",&m);
	for (i=1;i<=m;++i)
	{
		fscanf(f,"%d%d",&tip,&x);
		if (tip==0)
			fprintf(g,"%d\n",bsearch0(1,n));
		if (tip==1)
			fprintf(g,"%d\n",bsearch1(1,n));
		if (tip==2)
			fprintf(g,"%d\n",bsearch2(1,n));
	}
	fclose(f);
	fclose(g);
}

int main ()
{
	read ();
	return 0;
}