Cod sursa(job #2765340)

Utilizator Edyci123Bicu Codrut Eduard Edyci123 Data 26 iulie 2021 15:04:34
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>
#define NMAX 100005

using namespace std;

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

int n, m, v[NMAX];

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

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

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

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

    f >> m;

    for(int i = 1; i <= m; i++)
    {
        int ops, x;
        f >> ops >> x;
        if(ops == 0)
            g << cb0(x);
        if(ops == 1)
            g << cb1(x);
        if(ops == 2)
            g << cb2(x);
        g << "\n";
    }

    return 0;
}