Cod sursa(job #249249)

Utilizator vlad_popaVlad Popa vlad_popa Data 27 ianuarie 2009 21:55:05
Problema Cautare binara Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <cstdio>

#define MAXN 100005

int N, M;
int V[MAXN];

#define mj ((st + dr) >> 1)

int bin_search1 (int x) {
    int st = 1, dr = N;
    int poz;
    
    while (st <= dr)
        if (V[mj] <= x) {
            poz = mj;
            st = mj + 1;
        }
        else 
            dr = mj - 1;
            
    return poz;
}

int bin_search2 (int x) {
    int st = 1, dr = N;
    int poz;
    
    while (st <= dr) 
        if (V[mj] >= x) {
            poz = mj;
            dr = mj - 1;            
        }
        else
            st = mj + 1;
            
    return poz;
} 

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);
    
    int op, x;
    for (scanf(" %d", &M); M; -- M) {
        scanf (" %d %d", &op, &x);
        if (op < 2) {
            int p = bin_search1(x);
            if (op == 0 && V[p] != x) printf("-1\n");
            else printf ("%d\n", p);
        }                           
        else printf ("%d\n", bin_search2(x));
    }
    
    return 0;
}