Cod sursa(job #2863425)

Utilizator backleventeBack Levente backlevente Data 6 martie 2022 18:25:20
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <fstream>
#include <vector>
using namespace std;

#define ll long long

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

ll n, m;
vector <ll> x;

ll binary_search_max_index_of_num(ll start, ll end, ll k){
  if(x[end] == k)
    return end;

  if(start >= end)
    return -1;

  ll mid = (start + end) / 2;
  if(x[mid] == k) {
    if(x[mid + 1] != k)
      return mid;
    else 
      return binary_search_max_index_of_num(mid, end, k);
  }
  else if(x[mid] < k) 
    return binary_search_max_index_of_num(mid + 1, end, k);
  else 
    return binary_search_max_index_of_num(start, mid - 1, k);  
}

ll binary_search_index_of_num_or_less_than_num(ll start, ll end, ll k){
  if(start >= end)
    return start;

  ll mid = (start + end) / 2;
  if(x[mid] == k){
    if(x[mid + 1] != k)
      return mid;
    else 
      return binary_search_max_index_of_num(mid, end, k);
  }   
  else if(x[mid] > k) 
    return binary_search_index_of_num_or_less_than_num(start, mid - 1, k);
  else 
    return binary_search_index_of_num_or_less_than_num(mid + 1, end, k);
  
}



int main(){
  fin >> n;

  x.resize(n + 1);

  for(ll i = 1; i <= n; ++i)
    fin >> x[i];

  fin >> m;

  for(ll i = 1, query, num, k; i <= m; ++i){
    fin >> query >> num;
    if(query == 0)
      fout << binary_search_max_index_of_num(1, n, num) << "\n";
    else if(query == 1)
      fout << "";
    else if(query == 2)
      fout << "";
  } 

  return 0;
}