Cod sursa(job #1850338)

Utilizator msciSergiu Marin msci Data 18 ianuarie 2017 16:05:40
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 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);
    if (q < 2) {
      int lo = 1, hi = n;
      while (lo < hi) {
        int mid = lo + (hi - lo + 1) / 2;
        if (a[mid] <= x) lo = mid;
        else hi = mid - 1;
      }
      printf("%d\n", (a[lo] != x ? -1 : lo));
      continue;
    } 
    int lo = 1, hi = n;
    while (lo < hi) {
      int mid = lo + (hi - lo) / 2;
      if (a[mid] >= x) hi = mid;
      else lo = mid + 1;
    }
    printf("%d\n", lo);
  }
  return 0;
}