Cod sursa(job #2565455)

Utilizator gheorghe_cristiGheorghe Florin Cristi gheorghe_cristi Data 2 martie 2020 14:15:31
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

int n, k, x, inter;
int v[100005];

int cb1(int x)
{
    int st = 1, dr = n;
    bool found = false;
    while (st<=dr)
    {
        int mid = (st+dr)/2;
        if (v[mid] == x) {
            st = mid+1;
            found = true;
        }
        else if (v[mid] > x)
            dr = mid-1;
        else
            st = mid+1;
    }
    if (!found) return -1;
    return dr;
}

int cb2(int x)
{
    int st = 1, dr = n;
    while (st<=dr)
    {
        int mid = (st+dr)/2;
        if (v[mid] == x)
            dr = mid-1;
        else if (v[mid] > x)
            dr = mid-1;
        else
            st = mid+1;
    }
    return st;
}


int main()
{
    fin >> n;

    for (int i=1; i<=n; ++i)
        fin >> v[i];

    fin >> k;
    for (int i=1; i<=k; ++i)
    {
        fin >> inter >> x;
        if (inter == 0)
        {
            fout << cb1(x) << "\n";
        }
        if (inter == 1)
        {
            int p = cb1(x);
            if (v[p-1] == x)
                fout<<p<<"\n";
            else
                fout<<p-1<<"\n";

        }
        if (inter == 2)
        {
            int p = cb1(x);
            int q = cb2(x);
            if (p == q)
                fout << p + 1;
            else
                fout << q;
        }
    }
}