Cod sursa(job #2336235)

Utilizator CristianSoareSoare Cristian Costantin CristianSoare Data 4 februarie 2019 22:00:06
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda smenuri Marime 1.38 kb
#include <fstream>
#include <algorithm>
#define DIM 100000
using namespace std;

ofstream fout("cautbin.out");

char buff [DIM];
int p = DIM-1;

void inc(){
    p++;
    if (p == DIM){
        fread (buff, 1, DIM, stdin);
        p=0;
    }
}

void read(int &x){
    while (buff[p] < '0' || buff[p] > '9')
        inc();
    x = 0;
    while (buff [p] >= '0' && buff[p] <= '9'){
        x = 10*x + buff[p] - '0';
        inc();
    }
}

int n, v[100000], i, m, t, k, l;

int cb (int x){
    int i, pas;
    for (pas = 1;pas < n;pas <<= 1)
        ;
    for (i = 0;pas;pas >>= 1)
        if (i+pas < n && v[i+pas] <= x)
            i += pas;
    return i;
}

int main(){
    freopen ("cautbin.in", "r", stdin);
    read(n);
    for (i = 0;i < n;i++){
        read(v[i]);
    }
    read(m);
    while (m){
        m--;
        read (t);
        read (k);
        if (t == 0){
            l = cb(k);
            if (v[l] == k)
                fout << l+1 << '\n';
            else fout << -1 << '\n';
        }
        else if (t == 1){
            l = cb(k);
            if (v[l] == k)
                fout << l+1 << '\n';
            else fout << -1 << '\n';
        }
        else {
            l = cb(k);
            if (v[l] == k)
                fout << l-1 << '\n';
            else fout << -1 << '\n';
        }
    }
    return 0;
}