Cod sursa(job #273435)

Utilizator pandaemonAndrei Popescu pandaemon Data 8 martie 2009 16:11:23
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<stdio.h>
#include<iostream.h>

#define MAX 100005

int n,m,i,v[MAX],op,x,var;

int binary_search(int val)
{
 int st=1,dr=n,m;

 while(st!=dr)
 {
   m=dr+(st-dr)/2;

   if(val>=v[m]) st=m;
   else          dr=m-1;  }

 return dr;
}



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);

  while(m--)
  {
  scanf("%d %d",&op,&x);

  var=binary_search(x);

  if(op==0 || op==1) while(v[var+1]==x) var++;
  if(op==2)          while(v[var-1]==x) var--;

  if(op==0)  if(v[var]!=x)  printf("-1\n");
	     else           printf("%d\n",var);

  if(op==1)  if(v[var]>x)   printf("%d\n",var-1);
	     else           printf("%d\n",var);

  if(op==2)  if(v[var]<x)   printf("%d\n",var+1);
	     else           printf("%d\n",var);
  }


  return 0;
}