Cod sursa(job #1503051)

Utilizator OFY4Ahmed Hamza Aydin OFY4 Data 15 octombrie 2015 15:08:21
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<cstdio>
using namespace std;

#define nmax 100007

int n,m,v[nmax],a,b;

int cautbin(int val){

    int start=1, step=(1<<20);

    for( ;step;step>>=1){

        int index= start+ step;

        if(index>n)continue;

        if(v[index]<=val)start=index;
    }

    return start;
}

int main(){

    int px;

    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("%d \n", -1);
        }

        if(a==1){

            printf("%d \n", cautbin(b));
        }
        if(a==2){

            printf("%d \n", cautbin(b-1)+1);
        }
    }

    return 0;
}