Cod sursa(job #2348444)

Utilizator Senth30Denis-Florin Cringanu Senth30 Data 19 februarie 2019 18:43:12
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <bits/stdc++.h>

using namespace std;
const int NMAX = 100005;

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

int N, M, tip, val;
int v[NMAX];

int read(){
    fin >> N;
    for(int i=1; i<=N; i++)
        fin >> 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(){

    read();
    fin >> M;

    for(int i=0; i<M; i++){
        fin >> tip >> val;
        if(tip == 0)
            fout << search0(1, N) << endl;
        else if(tip == 1)
            fout << search1(1, N) << endl;
        else if(tip == 2)
            fout << search2(1, N) << endl;
    }

    return 0;
}