Cod sursa(job #2612401)

Utilizator ionutomutiuIonut Tomutiu ionutomutiu Data 8 mai 2020 22:27:27
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int N, A [100005], M;
int binary_search (int val)
{
    int i, step;
    for (step = 1; step < N; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step <= N && A[i + step] <= val)
           i += step;
    return i;
}
int main ()
{
    fin >> N;
    for (int i = 1; i <= N; i++)
        fin >> A[i];
    fin >> M;
    for (int i = 1; i <= M; i++)
    {
        int p, x;
        fin >> p >> x;
        int poz = binary_search (x);
        if (p == 0)
            if (A[poz] == x)
                fout << poz << "\n";
            else
                fout << -1 << "\n";
        else if (p == 1)
            fout << poz << "\n";
        else
        {
            if (A[poz] == x)
                for (int i = poz; i >= 1 && A[i] == A[i - 1]; i--)
                    poz--;
            else
                poz++;
            fout << poz << "\n";
        }
    }
}