Cod sursa(job #2420337)

Utilizator Rufus007Marincia Catalin Rufus007 Data 11 mai 2019 16:03:21
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include<fstream>

using namespace std;

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

int N, M, A[100011];

int cautareClasica(int a[], int dim, int value) {

    int i, step;
    for (step = 1; step < dim; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step < dim && a[i + step] <= value)
            i += step;
    if (a[i] != value||i>N-1)
        return -1;
    else
        return i + 1;
}

int cautarePozitieMaxima(int a[], int dim, int value) {

    int i, step;
    for (step = 1; step < dim; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step < dim && a[i + step] <= value)
            i += step;
    return i + 1;
}

int cautarePozitieMinima(int a[], int dim, int value) {

    int i, step;
    for (step = 1; step < dim; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step < dim && a[i + step] <= value - 1)
            i += step;
    return i + 2;
}

int main() {
    fin >> N;
    for (int i = 0; i < N; ++i)
        fin >> A[i];
    fin >> M;
    for (int i = 0; i < M; ++i) {
        int oper, x;
        fin >> oper >> x;

        if (oper == 0)
            fout << cautareClasica(A, N, x) << "\n";
        else if (oper == 1)
            fout << cautarePozitieMaxima(A, N, x) << "\n";
else            fout << cautarePozitieMinima(A, N, x) << "\n";

    }


    fin.close();
    fout.close();
    return 0;
}