Cod sursa(job #2555945)

Utilizator RobertLearnsCDragomir Robert. RobertLearnsC Data 24 februarie 2020 16:10:44
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include <bits/stdc++.h>

using namespace std;

int n, v[100001], m, nr, caz;

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

void bs0(int nr) {
    int left = 1, right = n, mid;

    while(left <= right) {
        mid = (left + right) / 2;
        if(v[mid] > nr) {
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    mid = (left + right) / 2;
    if(v[mid] > nr) {
        mid -= 1;
    }
    if(v[mid] == nr) {
        g <<  mid << '\n';
        return;
    }
    g << -1 << '\n';
}
void bs1(int nr) {
    int left = 1, right = n, mid, sol;

    while(left <= right) {
        mid = (left + right) / 2;
        if(v[mid] > nr) {
            right = mid - 1;
        } else {
            sol = mid;
            left = mid + 1;
        }
    }
    g << sol << '\n'; /// garantat valoare dif -1
}

void bs2(int nr) {
    int left = 1, right = n, mid, sol = -1;

    while(left <= right) {
        mid = (left + right) / 2;
        if(v[mid] >= nr) {
            right = mid - 1;
            sol = mid;
        } else {
            left = mid + 1;
        }
    }
    g << sol << '\n'; /// garantat valoare dif -1
}
int main()
{
    f >> n;
    for(int i = 1; i <= n; i++) {
        f >> v[i];
    }
    f >> m;
    for(int i = 1; i <= m; i++) {
        f >> caz >> nr;
        if(caz == 0) {
            bs0(nr);
            continue;
        }
        if(caz == 1) {
            bs1(nr);
        } else {
            bs2(nr);
        }
    }
    return 0;
}