Cod sursa(job #354469)

Utilizator funkydvdIancu David Traian funkydvd Data 8 octombrie 2009 11:17:27
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>
#define NMax 100005
int N, M, v[NMax], log,t, x, i, lg;
int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);
    scanf("%d", &N);
    for (i = 1; i <= N; ++i) scanf("%d", &v[i]);
    for (log = 1; log <= N; log <<= 1);
    scanf("%d", &M);
    for (; M; M--)
    {
        scanf("%d %d", &t, &x);
        if (t < 2)
        {
            for (lg = log, i = 0; lg; lg >>= 1)
                if (i + lg <= N && v[i + lg] <= x) i += lg; 
            if (!t && v[i] != x) printf("-1\n");
            else printf("%d\n", i);
			continue;
        }
        for (lg = log, i = N; lg; lg >>= 1)
            if (i - lg > 0 && v[i - lg] >= x) i-= lg;
        printf("%d\n", i);
    }
    return 0;
}