Cod sursa(job #2789981)

Utilizator Toni1817Ungureanu Ionut Toni1817 Data 28 octombrie 2021 12:07:45
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int a[100000], m, n;

int cautare1(int x)
{
    int li = 1, lf = n, m = (li + lf) / 2;
    while(li <= lf)
    {
        if(x >= a[m])
            li = m + 1;
        else
            lf = m - 1;
        m = (li + lf) / 2;
    }
    if(lf <= n && a[lf] == x)
        return lf;
    else
        return -1;

}
int cautare2(int x)
{
    int li = 1, lf = n, m = (li + lf) / 2;
    while(li <= lf)
    {
        if(x < a[m])
            lf = m - 1;
        else
            li = m + 1;
        m = (li + lf) / 2;
    }
        return lf;

}
int cautare3(int x)
{
     int li = 1, lf = n, m = (li + lf) / 2;
    while(li <= lf)
    {
        if(x > a[m])
            li = m + 1;
        else
            lf = m - 1;
        m = (li + lf) / 2;
    }
        return li;
}
int main()
{
    int x, p = 0, b[3], c;
    fin >> n;
    for(int i = 1; i <= n; i++)
        fin >> a[i];
    fin >> m;
    while(p < m)
    {
        fin >> c >> x;
        b[c] = x;
        p++;
    }
    for(int i = 0; i < 3; i++)
    {
        if(i == 0)
            fout << cautare1(b[i]) << "\n";
        if(i == 1)
            fout << cautare2(b[i]) << "\n";
        if(i == 2)
            fout << cautare3(b[i]) << "\n";
    }

    return 0;
}