Cod sursa(job #2376435)

Utilizator AlexiaPaunescu100Alexia Paunescu AlexiaPaunescu100 Data 8 martie 2019 15:36:53
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda pregatire_cls10_oji Marime 1.36 kb
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int n, x, v[100002], m, q;

int rezolva0(int p, int u, int x)
{
    int mij, sol=0;
    while(p <= u)
    {
        mij = (p + u) / 2;
        if(v[mij] <= x)
        {
            sol = mij;
            p = mij + 1;
        }
        else
            u = mij - 1;
    }
    if(v[sol] == x)
        return sol;
    return -1;
}

int rezolva1(int p, int u, int x)
{
    int mij, sol = 0;
    while(p <= u)
    {
        mij = (p + u) / 2;
        if(v[mij] <= x)
        {
            sol = mij;
            p = mij + 1;
        }
        else
            u = mij - 1;
    }
    return sol;
}

int rezolva2(int p, int u, int x)
{
    int mij, sol = 0;
    while(p <= u)
    {
        mij = (p + u) / 2;
        if(v[mij] < x)
            p = mij + 1;
        else
        {
            u = mij - 1;
            sol = mij;
        }
    }
    return sol;
}

int main()
{
    fin >> n;
    for(int i = 1; i <= n; ++ i)
        fin >> v[i];
    fin >> m;
    while(m --)
    {
        fin >> q >> x;
        if(q == 0)
            fout << rezolva0(1, n, x) << '\n';
        if(q == 1)
            fout << rezolva1(1, n, x) << '\n';
        if(q == 2)
            fout << rezolva2(1, n, x) << '\n';
    }
    return 0;
}