Cod sursa(job #1850284)

Utilizator msciSergiu Marin msci Data 18 ianuarie 2017 14:34:08
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

const int N = 100005;

int a[N];

int main() {
  freopen("cautbin.in", "r", stdin);
  freopen("cautbin.out", "w", stdout);
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", a + i);
  }
  int m;
  scanf("%d", &m);
  for (int ii = 0; ii < m; ii++) {
    int q, x;
    scanf("%d %d", &q, &x);
    int det, ix;
    for (det = 1; det <= n; det <<= 1);
    if (q < 2) {
      for (ix = 0; det; det >>= 1) {
        if (ix + det <= n && a[ix + det] <= x) {
          ix += det;
        }
      }
      if (q == 0 && a[ix] != x) {
        printf("%d\n", -1);
      } else {
        printf("%d\n", ix);
      }
      continue;
    }
    for (det = 1; det <= n; det <<= 1);
    for (ix = n; det; det >>= 1) {
      if (ix - det > 0 && a[ix - det] >= x) {
        ix -= det;
      }
    }
    printf("%d\n", ix);
  }
  return 0;
}