Cod sursa(job #3211269)

Utilizator leelcheeseCiovnicu Denis leelcheese Data 8 martie 2024 21:18:45
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <bits/stdc++.h>
#include <unordered_map>
#define nmax 100005
#define MOD 666013
#define INF 2012345678
#define ll long long
using namespace std;

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

int n;
int a[nmax];

// cea mai din drp val <= x
int CB(int x)
{
    int st, dr, mij, p;
    st = 1; dr = n; p = -1;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (a[mij] <= x)
        {
            p = mij;
            st = mij + 1;
        }
        else
            dr = mij - 1;
    }
    return p;
}

// cea mai din stg val >= x
int CB2(int x)
{
    int st, dr, mij, p;
    st = 1; dr = n; p = -1;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (a[mij] >= x)
        {
            p = mij;
            dr = mij - 1;
        }
        else
            st = mij + 1;
    }
    return p;
}

int main()
{
    int i, Q, t, x, y, z;
    fin >> n;
    for (i = 1; i <= n; i++)
        fin >> a[i];
    fin >> Q;
    while (Q--)
    {
        fin >> t >> x;
        y = CB(x);
        z = CB2(x);
        if ((t == 0 && a[y] == x) || t == 1)
            fout << y << "\n";
        else if (t == 2)
            fout << z << "\n";
        else
            fout << "-1\n";
    }
    fin.close();
    fout.close();
    return 0;
}