Cod sursa(job #493632)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 18 octombrie 2010 20:45:56
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#include <stdlib.h>

int i,N,M,v[1010],q,x,r,p;

void cb(int st,int dr)
{
	int mijl=st+(dr-st)/2;
	if(v[mijl]==x) r=mijl; // r = pozitia el. cautat
	  else
		if(st==dr)  
	     {
			r=mijl;
			p=-1;
			return;
	      }		
	if(v[mijl]<x) cb(mijl+1,dr);
	if(v[mijl]>x) cb(st,mijl);
}
int main()
{
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	scanf("%d",&N);
	for(i=1;i<=N;i++) scanf("%d",&v[i]);
	scanf("%d",&M);
	for(int j=1;j<=M;j++)
	{
		scanf("%d %d",&q,&x);
		p=0;
		cb(1,N);
		if(q==0) 
			if(p==-1) printf("-1");
			 else 
			 {
				for(i=r;i<=N && v[i]==x;i++);
				printf("%d",i-1);
			 }
		if(q==1)
		{
			for(i=r;i<=N && v[i]<=x;i++);
			printf("%d",i-1);
		}
		if(q==2)
		{
			for(i=r;i>=1 && v[i]>=x;i--);
			printf("%d",i+1);
		}
		printf("\n");
	}
}