Cod sursa(job #659406)

Utilizator mr.johnFMI - Laceanu Ionut-Adrian mr.john Data 10 ianuarie 2012 16:55:29
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <stdio.h>

using namespace std;

int v[100010];

int search1(int prim,int ultim,int key){
  int mij;
  while(prim<=ultim){
    mij=(prim+ultim)/2;
    if (v[mij]<=key) prim=mij+1;
    else ultim=mij-1;
  }
  mij=(prim+ultim)/2;
  if (v[mij]>key)mij--;
  if (v[mij]==key) return mij;
  return -1;
}

int search2(int prim,int ultim,int key){
  int mij;
  while(prim<=ultim){
    mij=(prim+ultim)/2;
    if (v[mij]<=key) prim=mij+1;
    else ultim=mij;    
  }
  mij=(prim+ultim)/2;
  if(v[mij]>key) mij--;
  return mij;
}

int search3(int prim,int ultim,int key){
  int mij;
  while(prim<=ultim){
    mij=(prim+ultim)/2;
    if (v[mij]<=key) prim=mij+1;
    else ultim=mij;    
  }
  mij=(prim+ultim)/2;
  if(v[mij]<key) mij++;
  return mij;
}

int main()
{
  int n, m, tip, valoare;
  freopen("cautbin.in","r",stdin);
  freopen("cautbin.out","w",stdout);
  scanf("%d", &n);
  for (int i=1; i<=n;i++)
    scanf("%d", &v[i]);
  scanf("%d", &m);
  for (int i=1;i<=m;i++){
    scanf("%d%d", &tip, &valoare);
    if (tip == 0)
      printf("%d\n", search1(1,n,valoare));
    if (tip == 1)
      printf("%d\n", search2(1,n,valoare));
    if (tip == 2)
      printf("%d\n", search3(1,n,valoare));
  }  
    return 0;
}