Cod sursa(job #1950303)

Utilizator antanaAntonia Boca antana Data 2 aprilie 2017 21:19:51
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>

#define MAXN 100001

using namespace std;

int v[MAXN], n;

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

    int step, answer, m, c, x, lg, n, i;

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

    lg = 1;
    while((lg << 1) <= n)  lg <<= 1;

    scanf("%d", &m);
    while(m--)
    {
        answer = 0;
        scanf("%d%d", &c, &x);
        if(c == 0 || c == 1) {
            for(step = lg; step >= 1; step >>= 1)
                if(answer + step <= n && v[answer + step] <= x)
                    answer += step;
            if(c == 0) {
                if(v[answer] == x) printf("%d\n", answer);
                else printf("-1\n");
            }
            else printf("%d\n", answer);
            continue;
        }

        for(step = lg; step >= 1; step >>= 1)
            if(answer + step <= n && v[answer + step] < x)
                answer += step;
        printf("%d\n", answer + 1);
    }

    return 0;
}