Cod sursa(job #1336851)

Utilizator PTAdrian64Pop-Tifrea Adrian PTAdrian64 Data 8 februarie 2015 12:43:31
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#define nmax 100010

long n,m;
long vt[nmax];
long logn;

void read();
void solve();

int main(){
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    read();
    solve();
    return 0;
}

void read(){
    scanf("%ld ",&n);
    for(int i = 1;i <= n;i++)scanf("%ld ",&vt[i]);
    scanf("%ld ",&m);
}

void solve(){
    long t,x,l,i;
    for(logn = 1;logn <= n;logn <<= 1);
    while(m--){
        scanf("%ld %ld ",&t,&x);
        if(t < 2){
            for(l = logn,i = 0;l;l >>= 1){
                if(i + l <= n && vt[i + l] <= x){
                    i += l;
                }
            }
            if(!t && vt[i] != x)printf("-1\n");
            else                printf("%ld\n",i);
            continue;
        }
        for(l = logn,i = n;l;l >>= 1){
            if(i - l > 0 && vt[i - l] >= x)i -= l;
        }
        printf("%ld\n",i);
    }
}