Cod sursa(job #1323297)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 20 ianuarie 2015 22:04:48
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

#define Nmax 100100

using namespace std;

int logN, N, M, A[Nmax];

int binarySearch(int Value) {

    int left, right, middle;

    left = 1;
    right = N;

    while(left < right) {

        middle = (left + right) >> 1;

        if(A[middle] <= Value)
            left = middle + 1;
        else
            right = middle;
    }

    return left;

}
void Read(ifstream & in) {

    in >> N;

    for(int i = 1; i <= N; i++)
        in >> A[i];

    in >> M;

}
int main() {

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

    Read(in);

    while(M--) {

        in >> type >> x;

        x -= (type == 2 ? 1 : 0);
        index = binarySearch(x);

        switch(type) {

            case 0:
                out << (A[index - 1] == x ? (index - 1) : -1);
                break;

            case 1:
                out << (index - 1);
                break;

            case 2:
                out << index;
                }

        out << '\n';

        }

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

    return 0;
}