Cod sursa(job #2682780)

Utilizator CaptnBananaPetcu Tudor CaptnBanana Data 9 decembrie 2020 16:46:51
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int solve0(int x, int v[], int s, int d){
    int m;

    while(s < d){
        m = (s + d) / 2;

        if(v[m] <= x)
            s = m + 1;
        else
            d = m - 1;
    }

    m = (s + d) / 2;
    if (v[m] > x)
        m--;

    if(v[m] == x)
        return m;

    return -1;
}

int solve1(int x, int v[], int s, int d){
    int m;

    while(s <= d){
        m = (s + d) / 2;

        if(v[m] <= x)
            s = m + 1;
        else
            d = m - 1;
    }
    m = (s + d) / 2;

    if(v[m] > x)
       m--;

    return m;
}

int solve2(int x, int v[], int s, int d){
    int m;

    while(s <= d){
        m = s + (d - s)/2;

        if(v[m] < x)
            s = m + 1;
        else
            d = m - 1;
    }
    m = s + (d - s)/2;

    if(v[m] < x)
        m++;

    return m;
}

int main(){
    int n, m, tip, x;
    f >> n;

    int v[n];
    for(int i = 1; i <= n; i++){
        f >> v[i];
    }

    f >> m;
    while(m--){
        f >> tip >> x;
        if(tip == 0){
            g << solve0(x, v, 1, n);
        }else if(tip == 1){
            g << solve1(x, v, 1, n);
        }else{
            g << solve2(x, v, 1, n);
        }

        if(!m){
            break;
        }
        g << "\n";
    }
}