Cod sursa(job #1503041)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 15 octombrie 2015 14:44:18
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>

#define NMAX 100007

int n, m, v[NMAX], a, b, px;

int cautbin(int val)
{
    int start = 1, step = (1<<30);
    for( ; step; step>>=1)
    {
        int index = start + step;
        if(index > n) continue;
        if(v[index] <= val) start = index;
    }
    return start;
}

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]);
    scanf("%d", &m);
    for( ; m; --m)
    {
        scanf("%d %d", &a, &b);
        if(a == 0)
        {
            px = cautbin(b);
            if(v[px] == b) printf("%d\n", px);
            else printf("-1\n");
        }
        if(a == 1)
        {
            px = cautbin(b);
            printf("%d\n", px);
        }
        if(a == 2)
        {
            px = cautbin(b-1)+1;
            printf("%d\n", px);
        }
    }
    return 0;
}