Cod sursa(job #3159232)

Utilizator Remus.RughinisRemus Rughinis Remus.Rughinis Data 20 octombrie 2023 22:52:40
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#define MAXN 100000

using namespace std;

long long v[MAXN];
int n;

// if getFirst is set to true, cautbin will return the first apparition of the number in the vector
int cautbin(int e, bool getFirst){
  long long mij, st = 0, dr = n;

  while(st < dr - 1){
    mij = st + (dr - st) / 2;
    if(v[mij] > e || (v[mij] == e && getFirst))
      dr = mij;
    else
      st = mij;
  }

  if(getFirst && v[dr] == e)
    return dr;
  return st;
}

int main(){
  int q, t;
  long long x;

  ifstream fin ("cautbin.in");
  fin >> n;
  for(int i = 0; i < n; i ++)
    fin >> v[i];

  ofstream fout ("cautbin.out");
  fin >> q;
  for(int i = 0; i < q; i ++){
    fin >> t >> x;
    bool getFirst = false;
    if(t == 2)
      getFirst = true;

    int pos = cautbin(x, getFirst);
    
    if(t == 0 && v[pos] != x)
      fout << "-1\n";
    else if(t == 2 && v[pos] != x)
      fout << pos + 2 << "\n";
    else
      fout << pos + 1 << "\n";
  }
  fout.close();
  fin.close();

  return 0;
}