Cod sursa(job #2071996)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 21 noiembrie 2017 11:53:07
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fi("cautbin.in");
ofstream fo("cautbin.out");

int v[100005];

inline bool cmp(int poz, int x, int c){
  if(c < 2)
    return v[poz] <= x;
  return v[poz] < x;
}

int main()
{
  int n, rez, c, x, k;
  fi >> n;
  for(int i = 1; i <= n; i++)
    fi >> v[i];
  fi >> k;
  for(; k > 0; k--){
    fi >> c >> x;
    rez = 1;
    for(int pas = 1 << 17; pas > 0; pas /= 2)
      if(rez + pas < n && cmp(rez + pas, x, c))
        rez += pas;
    if(c == 0 && v[rez] != x)
      fo << -1 << '\n';
    else if(c == 0 || c == 1)
      fo << rez << '\n';
    else
      fo << rez + 1 << '\n';
  }
  fi.close();
  fo.close();
  return 0;
}