Cod sursa(job #2238146)

Utilizator dragos192k1Dragos-Iulian Galeteanu dragos192k1 Data 4 septembrie 2018 18:28:40
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>

using namespace std;

int n, m, v[100005], quest, x, step, logN, poz;

int main()
{
    FILE *in, *out;
    in = freopen("cautbin.in", "r", stdin);
    out = freopen("cautbin.out", "w", stdout);

    scanf("%d", &n);

    for (int i = 1; i <= n; ++i) scanf("%d", &v[i]);

    scanf("%d", &m);

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

    for (int i = 1; i <= m; ++i) {
        scanf("%d%d", &quest, &x);

        if (quest < 2) {
            for (step = logN, poz = 0; step; step >>= 1)
                if (poz + step <= n && v[poz + step] <= x)
                    poz += step;

            if (!quest && v[poz] != x) printf("-1\n");
            else printf("%d\n", poz);

            continue;
        }

        for (step = logN, poz = n; step; step >>=1)
            if (poz - step >= 1 && v[poz - step] >= x)
                poz -= step;

        printf("%d\n", poz);
    }

    fclose(in);
    fclose(out);
    return 0;
}