Cod sursa(job #2961857)

Utilizator XTrim07Florea Andrei XTrim07 Data 7 ianuarie 2023 10:19:28
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.62 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int MAX_SIZE = 100000;
int v[MAX_SIZE + 1];

int binary_search_0(int left, int right, int val) {
  int division;
  while (left <= right) {
    division = (left + right) / 2;
    if (v[division] <= val) {
      left = division + 1;
    } else {
      right = division - 1;
    }
  }
  division = (left + right) / 2;
  if (v[division] > val) {
    --division;
  }
  if (v[division] == val) {
    return division;
  }
  return -1;
}

int binary_search_1(int left, int right, int val) {
  int division;
  while (left < right) {
    division = (left + right) / 2;
    if (v[division] <= val) {
      left = division + 1;
    } else {
      right = division;
    }
  }
  division = (left + right) / 2;
  if (v[division] > val) {
    --division;
  }
  return division;
}

int binary_search_2(int left, int right, int val) {
  int division;
  while (left < right) {
    division = (left + right) / 2;
    if (v[division] < val) {
      left = division + 1;
    } else {
      right = division;
    }
  }
  division = (left + right) / 2;
  if (v[division] < val) {
    ++division;
  }
  return division;
}
int main() {
  int n, m;
  fin >> n;
  for (int i = 1; i <= n; ++i ){
    fin >> v[i];
  }
  fin >> m;
  while(--m) {
    if (m == 0) {
      fout << binary_search_0(1, n, m) << '\n';
    }
    if (m == 1) {
      fout << binary_search_1(1, n, m) << '\n';
    }
    if (m == 2) {
      fout << binary_search_2(1, n, m) << '\n';
    }
  }
  return 0;
}