Cod sursa(job #2332748)

Utilizator MariaDMaria D MariaD Data 31 ianuarie 2019 10:35:22
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream in("cautbin.in");
ofstream out("cautbin.out");

int num[100001];
int N;

int binSearch(int x) {
  int i;
  int step;
  for (step = 1; step < N; step <<= 1);
  for (i = 0; step; step >>= 1) {
    if (i + step <= N && num[i + step - 1] <= x) {
      i += step;
    }
  }
  return i;
}

int main() {

  in >> N;

  for (int i = 0; i < N; i++) {
    in >> num[i];
  }

  int M;
  in >> M;

  int query;
  int numberToFind;

  while (M) {
    in >> query >> numberToFind;
    int find;

    if (query == 0) {
      find = binSearch(numberToFind);
      if (num[find - 1] == numberToFind) {
        out << find << "\n";
      } else {
        out << "-1\n";
      }
    }

    if (query == 1) {
      find = binSearch(numberToFind);
      out << find << "\n";
    }

    if (query == 2) {
      find = binSearch(numberToFind - 1);
      out << find + 1 << "\n";
    }
    M--;
  }

  return 0;
}