Cod sursa(job #1413565)

Utilizator BaTDucKMocanu George BaTDucK Data 1 aprilie 2015 22:36:14
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<bits/stdc++.h>

#define Nmax 100005

using namespace std;

int N, M, V[Nmax], step;

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

    scanf("%d", &N);

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

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

    scanf("%d", &M);

    for( ; M; -- M) {
        int tip, A, j = 0;
        scanf("%d %d", &tip, &A);

        if(tip == 0) {
            for(int i = step; i; i >>= 1)
                if(j + i <= N && V[j + i] <= A)
                    j += i;
            V[j] == A ? printf("%d\n", j) : printf("-1\n");
            continue ;
        }

        if(tip == 1) {
            for(int i = step; i; i >>= 1)
                if(j + i <= N && V[j + i] <= A)
                    j += i;
            printf("%d\n", j);
            continue ;
        }

        if(tip == 2) {
            j = N;
            for(int i = step; i; i >>= 1)
                if(V[j - i] >= A && j - i > 0)
                    j -= i;
            printf("%d\n", j);
            continue ;
        }

    }
    return 0;
}