Cod sursa(job #3188782)

Utilizator andutu0Lungu Andrei andutu0 Data 3 ianuarie 2024 20:19:24
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <iostream>

using namespace std;

int v[100001],n,m,x,p;

int cb3(int x)
{
    int l=0, e=17;
    while(e>=0)
    {
        if(l+(1<<e)<=n && v[l+(1<<e)]<=x)
        {
            l+=1<<e;
        }
        e--;
    }
    return l;
}

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

    fin>>n;
    for(int i=1; i<=n; i++) fin>>v[i];
    fin>>m;
    for(int i=1; i<=m; i++)
    {
        fin>>p>>x;
        if(p==0){
            int q=cb3(x);
            if(v[q]==x) fout<<q<<' ';
            else fout<<-1<<' ';
        }
        else if(p==1){
            fout<<cb3(x)<<' ';
        }
        else{
            int q=cb3(x);
            if(v[q]==x)
            {
                while(v[q]==x) q--;
            }
            fout<<q+1<<' ';
        }
    }

    return 0;
    fin.close();
    fout.close();
}