Cod sursa(job #2059662)

Utilizator nrpcCiprian Stirbu nrpc Data 7 noiembrie 2017 13:09:26
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define N 100005
int v[N];

int bsearch01 (int l, int r, int key) {
    int m;

    while (l <= r) {
        m = (l + r) / 2;
        if (v[m] <= key)
            l = m + 1;
        else
            r = m - 1;
    }
    m = (l + r) / 2;

    if (v[m] > key) m --;
    return m+1;
}

int bsearch2 (int l, int r, int key) {
    int m;

    while (l <= r) {
        m = (l + r) / 2;
        if (v[m] < key)
            l = m + 1;
        else
            r = m - 1;
    }
    m = (l + r) / 2;

    if (v[m] < key) m ++;
    return m+1;
}


int main(){

    int i, n, m, type, val;
    freopen("cautabin.in", "r", stdin);
    freopen("cautabin.out", "w", stdout);

    scanf("%d", &n);

    for(i = 0; i < n; ++i)
        scanf("%d", &v[i]);

    scanf("%d", &m);

    for(i=0; i < m; ++i){
        scanf("%d%d", &type, &val);
        if(type != 2)
            printf("%d\n", bsearch01(0, n, val));
        else
            printf("%d\n", bsearch2(0, n, val));
    }
}