Cod sursa(job #2251825)

Utilizator dia.ionescuIonescu Diana dia.ionescu Data 1 octombrie 2018 23:40:32
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int cautbin0(int f, int l, int val, int v[]){
    int poz = -1, m;
    while (f <= l){
        m = f + (l - f) / 2;
        if (val < v[m])
            l = m - 1;
        else
            f = m + 1;
        if (val == v[m])
            poz = m;
    }
    return poz;
}

int cautbin1(int f, int l, int val, int v[]){
    int poz = 0, m;
    while (f <= l){
        m = f + (l - f) / 2;
        if (val < v[m])
            l = m - 1;
        else
            f = m + 1;
        if (val == v[m])
            poz = m;
    }
    if (poz == 0)
        return l;
    else
        return poz;
}

int cautbin2(int f, int l, int val, int v[]){
    int poz = 0, m;
    while (f <= l){
        m = f + (l - f) / 2;
        if (val <= v[m])
            l = m - 1;
        else
            f = m + 1;
        if (val == v[m])
            poz = m;
    }
    if (poz == 0)
        return f;
    else
        return poz;
}
int main()
{
    int n, m, x, c, v[100001], i;
    fin >> n;

    for (i = 1; i <= n; i++)
        fin >> v[i];
    fin >> m;
    for (i = 1; i <= m; i++){
        fin >> c >> x;

        if (c == 0)
            fout << cautbin0(1, n, x, v) << '\n';
        if (c == 1)
            fout << cautbin1(1, n, x, v) << '\n';
        if (c == 2)
            fout << cautbin2(1, n, x, v) << '\n';
    }
    return 0;
}