Cod sursa(job #676556)

Utilizator sory1806Sandu Sorina-Gabriela sory1806 Data 9 februarie 2012 11:58:45
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb

#include <cstdio>

#define _MAX_N 100010

using namespace std;

int v[_MAX_N], n;

int binary_search(int x, int &p, int &u) {

  int mj;

  while(p <= u) {

    mj = p + (u - p) / 2;

    if(x < v[mj])
      u = mj - 1;
    else
      p = mj + 1;

  }

  return 0;
}

int main() {

  int p, u, op, m, x;

  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 = 0; i < m; i ++) {
    scanf("%d%d", &op, &x);
    p = 1; u = n;

    binary_search(x, p, u);

    if(op == 0)
      if(v[u] == x)
	printf("%d\n", u);
      else
	printf("-1\n");
    if(op == 1)
      printf("%d\n", u);
    if(op == 2) {
      while(v[p - 1] == x)
	p --;
      printf("%d\n", p);
    }
  }

  return 0;
}