Cod sursa(job #1252689)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 31 octombrie 2014 00:27:26
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>

#define Nmax 100100

using namespace std;

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

int binarySearch(int Value) {

    int i, Step = logN;

    for(i = 0; Step; Step >>= 1)
        if(i + Step <= N && A[i + Step] <= Value)
            i += Step;

    return i;

}
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);

    for(logN = 1; logN <= N; logN <<= 1);

    while(M--) {

        in >> type >> x;



        switch(type) {

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

            case 1:
                index = binarySearch(x);
                out << index;
                break;

            case 2:
                index = binarySearch(x - 1);
                out << (index + 1);

                }

        out << '\n';

        }

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

    return 0;
}