Cod sursa(job #274942)

Utilizator Andrei_ScorpioAndreiana Andrei Daniel Andrei_Scorpio Data 10 martie 2009 09:00:33
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<stdio.h>
#define Nmax 1010
int a[Nmax],n,m;

int caut(int nr,int x)
{
 int p=1,u=n,mij;
 while(p<=u)
 {
	mij=p+(u-p)/2;
	if(a[mij]==x)
		break;
	if(a[mij]>x)
		u=mij-1;
	else
		p=mij+1;
 }
 mij=p+(u-p)/2;
 switch(nr)
 {
	case 0: 	{if(a[mij]==x)
				{
				while(a[mij]==x && mij<=n)
					mij++;
				return mij-1;
				}
			else
				return -1;
			}
	case 1:{if(a[mij]==x)
		 {	while(a[mij]==x)
				mij--;
			return mij+1;
		 }
		 else
			if(a[mij]<x)
				return mij;
			else
				return mij-1;
		 }
	case 2:{if(a[mij]==x)
		 {	while(a[mij]==x)
				mij++;
			return mij-1;
		 }
		 else
			if(a[mij]>x)
				return mij;
			else
				return mij+1;
		 }
 }
return 0;
}
int main()
{
 int x,nr;
 freopen("cautbin.in","r",stdin);
 freopen("cautbin.out","w",stdout);
 scanf("%d",&n);
 int i;
 for(i=1;i<=n;i++)
	scanf("%d",&a[i]);
 scanf("%d",&m);
 for(i=1;i<=m;i++)
 {	scanf("%d%d",&nr,&x);
	printf("%d\n",caut(nr,x));
 }
 fclose(stdin);
 fclose(stdout);
 return 0;
}