Cod sursa(job #2443618)

Utilizator TherevengerkingSurani Adrian Therevengerking Data 28 iulie 2019 20:23:25
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int Nmax = 100000 + 5;
int a[Nmax], n, m;

int main()
{
    fin >> n;
    for(int i = 1; i <= n; ++i)fin >> a[i];

    fin >> m;
    for(int i = 1, vr, x, lo, hi, sol = -1; i <= m; ++i)
    {
        lo = 1, hi = n;
        fin >> vr >> x;
        if(vr == 0)
        {
            while(lo <= hi)
            {
                int mid = lo + (hi - lo) / 2;

                if(x < a[mid])hi = mid - 1;
                else if(x > a[mid])lo = mid + 1;
                else sol = mid, lo = mid + 1;
            }
        }
        else if(vr == 1)
        {
            while(lo <= hi)
            {
                int mid = lo + (hi - lo) / 2;

                if(x >= a[mid])lo = mid + 1, sol = mid;
                else hi = mid - 1;
            }
        }
        else
        {
            while(lo <= hi)
            {
                int mid = lo + (hi - lo) / 2;

                if(x <= a[mid])hi = mid - 1, sol = mid;
                else lo = mid + 1;
            }
        }
        fout << sol << '\n';
    }

    return 0;
}