Cod sursa(job #259650)

Utilizator yoyolichIoana Ardeleanu yoyolich Data 15 februarie 2009 17:06:32
Problema Cautare binara Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include<stdio.h>
#define nmax 100001
FILE *f=fopen("cautbin.in","r"), *g=fopen("cautbin.out","w");
int n,m,i,k,N,NN,p,x,a[nmax];
int main()
{
	fscanf(f,"%d",&n,&m);
	for(i=1;i<=n;i++)
		fscanf(f,"%d",&a[i]);
	
	for(N=1;N<=n; N<<=1);
	
	fscanf(f,"%d",&m);
	for(i=1;i<=m;i++)
	{
		fscanf(f,"%d %d",&p,&x);
		if(p<2)
		{
			k=0;
			for(NN=N;NN;NN>>=1)
			{
				if(k+NN<=n && a[k+NN]<=x)
					k+=NN;
			}
			
			if(!p && a[k]!=x) fprintf(g,"-1\n");
			else fprintf(g,"%d\n",k);
			
		}
		else 
		{
			k=n;
			for(NN=N;NN;NN>>=1)
			{
				if(k-NN && a[k-NN]>=x)
					k-=NN;
			}
			fprintf(g,"%d\n",k);
		}
	}
	fclose(f);
	fclose(g);
	return 0;
}