Cod sursa(job #3324676)

Utilizator kkcalinMarin Calin kkcalin Data 22 noiembrie 2025 22:33:43
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <bits/stdc++.h>
using namespace std;

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

const int NMAX = 1e6;
int i, j, k, n;
int a[NMAX + 5], b[NMAX + 5];

int pozitie_egala (int k)
{
    int st = 1, dr = n, poz = -1;
    while (st <= dr)
    {
        int mij = st + (dr - st) / 2;
        if (a[mij] == k)
        {
            poz = mij;
            st = mij + 1;
        } else {
            if (a[mij] < k)
                st = mij + 1;
            else
                dr = mij - 1;
        }
    }
    return poz;
}

int pozitie_mare (int k)
{
    int st = 1, dr = n, poz = -1;
    while (st <= dr)
    {
        int mij = st + (dr - st) / 2;
        if (a[mij] <= k)
        {
            poz = mij;
            st = mij + 1;
        } else dr = mij - 1;
    }
    return poz;
}

int pozitie_mica (int k)
{
    int st = 1, dr = n, poz = -1;
    while (st <= dr)
    {
        int mij = st + (dr - st) / 2;
        if (a[mij] >= k)
        {
            poz = mij;
            dr = mij - 1;
        } else st = mij + 1;
    }
    return poz;
}

int main() 
{
    int m;
    
    in >> n;
    for (i = 1; i <= n; i++)
        in >> a[i];
    
    in >> m;
    while (m--)
    {
        int a, b;
        in >> a >> b;
        
        if (a == 0) out << pozitie_egala(b) << '\n';
        if (a == 1) out << pozitie_mare(b) << '\n';
        if (a == 2) out << pozitie_mica(b) << '\n';
    }
    
    return 0;
}