Cod sursa(job #873353)

Utilizator mihai995mihai995 mihai995 Data 7 februarie 2013 09:10:19
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
using namespace std;

const int N = 100001;
int v[N], n;

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

int bs(int v[], int x){
    int i = 0;

    for (int step = 1 << 16 ; step ; step >>= 1)
        if (i + step <= n && v[i + step] <= x)
            i += step;

    return i;
}

int op0(int x){
    int ans = bs(v, x);

    return v[ans] == x ? ans : -1;
}

int op1(int x){
    return bs(v, x);
}

int op2(int x){
    return bs(v, x - 1) + 1;
}

int main(){
    int m, t, x;

    in >> n;

    for (int i = 1 ; i <= n ; i++)
        in >> v[i];

    in >> m;

    while (m--){
        in >> t >> x;

        if (t == 0)
            out << op0(x) << "\n";

        if (t == 1)
            out << op1(x) << "\n";

        if (t == 2)
            out << op2(x) << "\n";
    }

    return 0;
}