Cod sursa(job #792189)

Utilizator gallexdAlex Gabor gallexd Data 26 septembrie 2012 18:16:25
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>

int N,M;
int v[100100];
int type, val;

void bs(int val) {
    int i, step;
    for (step=1; step<N; step<<=1);
    for (i=0; step; step>>=1)
        if (i+step<N && v[i+step]<=val)
            i+=step;
    if (!type && v[i]!=val)
        printf("-1\n");
    else printf("%d\n",i+1);
}

void bs2(int val) {
    int i,step;
    for (step=1; step<N; step<<=1);
    for (i=N-1; step; step>>=1)
        if (i-step>=0 && v[i-step]>=val)
            i-=step;
    printf("%d\n",i+1);
}

int main () {

    freopen("cautbin.in","rt",stdin);
    freopen("cautbin.out","wt",stdout);

    scanf("%d",&N);
    for (int i=0; i<N; scanf("%d",&v[i]), ++i);
    scanf("%d",&M);
    for (; M>0; --M) {
        scanf("%d %d\n", &type, &val);
        switch (type) {
            case 0: case 1: bs(val); break;
            case 2: bs2(val); break;
        }
    }

    return 0;
}