Cod sursa(job #2639160)

Utilizator isa_tudor_andreiAndrei Tudor isa_tudor_andrei Data 31 iulie 2020 16:43:32
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

using namespace std;

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

const int NMAX = 1e5;

int v[NMAX + 1];

int cb( int x, int n ) {
  int pas = 1<<19;
  int r = 0;
  while( pas ) {
    pas /= 2;
    if( r + pas <= n && v[r + pas] <= x ) //verificam daca putem efectua pasul
      r += pas;
  }
  return r;
}

int main() {
    int n, m;
    fin>>n;
    for( int i = 1; i <= n; i ++ )
      fin>>v[i];
    fin>>m;
    for( int i = 1; i <= m; i ++ ) {
      int tip, x;
      fin>>tip>>x;
      if( tip < 2 ) {
        int poz = cb(x, n); //cautam cea mai din dreapta valoare mai mica sau egala cu x
        if( tip == 0 && v[poz] != x ) //x nu se gaseste in sir
          fout<<"-1\n";
        else
          fout<<poz<<"\n";
      }
      else {
        int poz = cb(x - 1, n); //cautam cea mai din dreapta pozitie strict mai mica decat x
        fout<<poz + 1<<"\n"; //v[poz + 1] este mai mare sau egal cu x
      }
    }
    return 0;
}