Cod sursa(job #2526101)

Utilizator Teodor94Teodor Plop Teodor94 Data 18 ianuarie 2020 11:48:04
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <cstdio>

#define MAX_N 100000

int v[MAX_N];

int main() {
    FILE *fin, *fout;
    fin = fopen("cautbin.in", "r");
    fout = fopen("cautbin.out", "w");

    int n, m, task, x, i, step;
    fscanf(fin, "%d", &n);
    for (int i = 0; i < n; ++i)
        fscanf(fin, "%d", &v[i]);

    fscanf(fin, "%d", &m);
    while (m--) {
        fscanf(fin, "%d%d", &task, &x);
        if (task == 0) {
            for (i = -1, step = 1 << 20; step; step >>= 1)
                if (i + step < n && v[i + step] <= x)
                    i += step;

            if (v[i] == x)
                fprintf(fout, "%d\n", i + 1);
            else
                fprintf(fout, "-1\n");
        } else if (task == 1) {
            for (i = -1, step = 1 << 20; step; step >>= 1)
                if (i + step < n && v[i + step] <= x)
                    i += step;

            fprintf(fout, "%d\n", i + 1);
        } else if (task == 2) {
            for (i = -1, step = 1 << 20; step; step >>= 1)
                if (i + step < n && v[i + step] <= x - 1)
                    i += step;

            fprintf(fout, "%d\n", i + 2);
        }
    }

    fclose(fin);
    fclose(fout);
    return 0;
}