Cod sursa(job #586851)

Utilizator Anamaria20Cotirlea Anamaria Anamaria20 Data 3 mai 2011 08:33:55
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <stdio.h>

FILE *f,*s;

int a,b;

int i,j,k,l,m,n;

int v[100005];

void Cauta1()
{
	int st=1;
	int dr=n;
	
	int mj;
	
	while(st<=dr)
	{
		mj=(st+dr)/2;
		
		if(v[mj]==b && (v[mj+1]!=b || mj+1>n))
		{
			fprintf(s,"%d\n",mj);
			
			break;
		}	
		else if(v[mj]<=b)
			st=mj+1;
		else
			dr=mj-1;
	}
	
	fprintf(s,"-1\n");
}

void Cauta2()
{
	int st=1;
	int dr=n;
	
	int mj;
	
	while(st<=dr)
	{
		mj=(st+dr)/2;
		
		if(v[mj]<=b && (v[mj+1]>b || mj+1>n))
		{
			fprintf(s,"%d\n",mj);
			
			break;
		}	
		else if(v[mj]<=b)
			st=mj+1;
		else
			dr=mj-1;
	}
}

void Cauta3()
{
	int st=1;
	int dr=n;
	
	int mj;
	
	while(st<=dr)
	{
		mj=(st+dr)/2;
		
		if(v[mj]>=b && (v[mj-1]<b || mj-1<1))
		{
			fprintf(s,"%d\n",mj);
			
			break;
		}	
		else if(v[mj]>=b)
			dr=mj-1;
		else
			st=mj+1;
	}
}

int main()
{
	f=fopen("cautbin.in","r");
	s=fopen("cautbin.out","w");
	
	fscanf(f,"%d",&n);
	
	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",&a,&b);
		
		if(a==0) Cauta1();
		if(a==1) Cauta2();
		if(a==2) Cauta3();	
	}	
	
	fclose(s);
	
	return 0;
}