Cod sursa(job #1331993)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 1 februarie 2015 15:18:02
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>

#define Nmax 100100

using namespace std;

int Step, N, A[Nmax];

int upperBound(int value) {

    int left, right, middle;

    left = 0;
    right = N;

    while(right - left > 1) {
        middle = left + (right - left) / 2;
        if(A[middle] <= value)
            left = middle;
        else
            right = middle;
    }

    return (left + 1);

}
void Read(ifstream & in) {

    in >> N;
    for(int i = 0; i < N; i++)
        in >> A[i];
}
int main() {

    int x, index, type, queries;
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");

    Read(in);

    in >> queries;
    while(queries--) {

        in >> type >> x;

        switch(type) {
            case 0:
                out << (A[index = upperBound(x) - 1] == x ? (index + 1) : -1);
                break;

            case 1:
                out << (upperBound(x));
                break;

            case 2:
                out << (upperBound(x - 1)) + 1;
        }

        out << '\n';
    }

    in.close();
    out.close();

    return 0;
}