Cod sursa(job #2372552)

Utilizator petru.theodorCristea Petru Theodor petru.theodor Data 7 martie 2019 09:52:01
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda pregatire_cls10_oji Marime 1.45 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int n, v[100005], val, x, y, tip, M;
int read()
{
    scanf("%d", &n);
    for(int i=1; i<=n; i++)
         scanf("%d", &v[i]);
}

int search0(int x, int y){
    int m;

    while (x <= y) {
        m = (x + y) / 2;
        if (v[m] <= val)
            x = m + 1;
        else
            y = m - 1;
    }
    m = (x + y) / 2;
    if(v[m] > val)
        m--;
    if(v[m] == val)
        return m;
    return -1;
}

int search1(int x, int y){
    int m;

    while(x < y){
        m = (x + y) / 2;
        if(v[m] <= val)
            x = m + 1;
        else
            y = m;
    }
    m = (x + y) / 2;
    if(v[m] > val)
        --m;
    return m;
}

int search2(int x, int y){
    int m;

    while(x < y){
        m = (x + y) / 2;
        if(v[m] < val)
            x = m + 1;
        else
            y = m;
    }
    m = (x + y) / 2;
    if(v[m] < val)
        m++;
    return m;
}
int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);

    read();
    scanf("%d", &M);

    for(int i=0; i<M; i++){
        scanf("%d%d", &tip, &val);
        if(tip == 0)
            printf("%d\n", search0(1, n));
        else if(tip == 1)
            printf("%d\n", search1(1, n));
        else if(tip == 2)
            printf("%d\n", search2(1, n));
    }

    }