Cod sursa(job #2892138)

Utilizator hobbitczxdumnezEU hobbitczx Data 20 aprilie 2022 22:10:59
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <bits/stdc++.h>

using namespace std;

const string fisier = "cautbin";

ifstream fin (fisier + ".in");
ofstream fout (fisier + ".out");

void test_case() {
  int n; fin >> n;
  vector<int>v(n + 1);
  for (auto &x : v){
    fin >> x;
  }
  int q; fin >> q;
  while (q--){
    int p , x; fin >> p >> x;
    if (p == 0){
      int l = 0 , r = n - 1 , ans = n - 1;
      while (l <= r){
        int mid = (l + r) / 2;
        if (v[mid] > x){
          ans = mid;
          r = mid - 1;
        }
        else{
          l = mid + 1;
        }
      }
      if (ans - 1 >= 0 && v[ans - 1] == x){
        fout << ans << '\n';
      }
      else{
        fout << -1 << '\n';
      }
    }
    if (p == 1){
      int l = 0 , r = n - 1 , ans = n - 1;
      while (l <= r){
        int mid = (l + r) / 2;
        if (v[mid] > x){
          ans = mid;
          r = mid - 1;
        }
        else{
          l = mid + 1;
        }
      }
      fout << ans << '\n';
    }
    if (p == 2){
      int l = 0 , r = n - 1;
      while (l <= r){
        int mid = (l + r) / 2;
        if (v[mid] > x){
          r = mid - 1;
        }
        else{
          l = mid + 1;
        }
      }
      fout << r + 1 << '\n';
    }
  }
}

int main(){
  ios_base::sync_with_stdio(false);
  fin.tie(NULL);
  int tests = 1;
  for (int tc=0; tc<tests; ++tc) {
    test_case();
  }
}