Cod sursa(job #3170585)

Utilizator TEODOR_782IOACHIMCIUC TEODOR TEODOR_782 Data 17 noiembrie 2023 19:41:45
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <bitset>

using namespace std;

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

int n, m, v[100000], x;

int sarcina0(int a)
{
    int lg = 1;
    int poz = 1;
    for(lg; lg <= n; lg <<= 1)
        if(lg + poz <= n && v[lg + poz] <= a)
        {
            poz += lg;
        }
    if(v[poz] == a)
    {
        return poz;
    }
    return -1;
}

int sarcina1(int a)
{
    int lg = 1;
    int poz = 1;
    for(lg; lg <= n; lg <<= 1)
        if(lg + poz <= n && v[lg + poz] <= a)
        {
            poz += lg;
        }
    if(v[poz] == a)
    {
        return poz;
    }
    return -1;
}

int sarcina2(int a)
{
    int lg = 1;
    int poz = n;
    for(; lg; lg >>= 1)
        if(poz - lg >= 0 && v[poz - lg] >= a)
            poz -= lg;
    if(v[poz] == a)
    {
        return poz;
    }
    return -1;
}

int main()
{
    in >> n;
    for(int i = 1; i <= n; i++)
    {
        in >> v[i];
    }
    in >> m;
    for(int k = 1; k <= m; k++)
    {
        int s;
        in >> s;
        if(s == 0)
        {
            in >> x;
            out << sarcina0(x) << endl;
        }
        if(s == 1)
        {
            in >> x;
            out << sarcina1(x) << endl;
        }
        if(s == 2)
        {
            in >> x;
            out << sarcina2(x) - 2 << endl;
        }
    }
    return 0;
}