Cod sursa(job #2544395)

Utilizator flee123Flee Bringa flee123 Data 11 februarie 2020 23:35:19
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

unsigned n, m;
vector <unsigned> numere;

int caut_bin(unsigned element, unsigned operatie)
{
    unsigned st = 0, dr = n - 1, m;
    while(st != dr)
    {
        m = (st + dr)/2;
        if(numere[m] < element)
            st = m + 1;
        else dr = m;
    }
    if(operatie == 0)
    {
        if(numere[st] != element)
            return -1;
        else
        {
            while(numere[st] == element && st < n)
                st++;
            return st - 1;
        }
    }
    if(operatie == 1)
    {
        if(numere[st] == element)
        {
            while(numere[st] == element && st < n)
                st++;
            return st - 1;
        }
        else
        {
            return st - 1;
        }
    }
    else
    {
        if(numere[st] == element)
        {
                while(numere[st] == element && st >= 0)
                    st--;
                return st + 1;
        }
        else
        {
            dr = numere[st];
            while(numere[st] == dr && st >= 0)
                st--;
            return st + 1;
        }
    }
}

int main()
{
    unsigned x, i, op;
    fin >> n;
    for(i = 0; i < n; i++)
        fin >> x, numere.push_back(x);
    fin >> m;
    for(i = 0; i < m; i++)
    {
        fin >> op >> x;
        fout << 1 + caut_bin(x, op) << '\n';
    }
    return 0;
}