Cod sursa(job #2544410)

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

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

int n, m;
int numere[100005];

int caut_bin(int element, int operatie)
{
    int st = 0, dr = n - 1, m;
    while(st != dr)
    {
        m = (st + dr)>>1;
        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
        {
            if(numere[st] < element)
                return st;
            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()
{
    int x, i, op, y;
    fin >> n;
    for(i = 0; i < n; i++)
        fin >> numere[i];
    fin >> m;
    for(i = 0; i < m; i++)
    {
        fin >> op >> x;
        y = caut_bin(x, op);
        if(y == -1)
            fout << "-1" << '\n';
        else
            fout << y + 1 << '\n';
    }
    return 0;
}