Cod sursa(job #1404584)

Utilizator dumitrualexAlex Dumitru dumitrualex Data 28 martie 2015 12:55:33
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <cstdio>

using namespace std;

int N, M;
int * A;

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

    int op, val, i, index, step;

    scanf("%d", &N);

    A = new int[N+5];

    for (i = 0; i < N; i++)
        scanf("%d", &A[i]);

    scanf("%d", &M);

    for (i = 0; i < M; i++)
    {
        scanf("%d%d", &op, &val);

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


        switch (op)
        {
        case 0:
            index = 0;
            for (; step; step >>= 1)
                if (index + step < N && A[index+step] <= val)
                    index += step;

            if (A[index] == val)
                printf("%d\n", index+1);
            else
                printf("-1\n");
            break;
        case 1:
            index = 0;
            for (; step; step >>= 1)
                if (index + step < N && A[index+step] <= val)
                    index += step;

                printf("%d\n", index+1);
            break;
        case 2:
            index = N-1;
            for (; step; step >>= 1)
                if (index - step >= 0 && A[index-step] >= val)
                    index -= step;

                printf("%d\n", index+1);
            break;
        }
    }
    return 0;
}