Cod sursa(job #3319104)

Utilizator carinamariaCarina Maria Viespescu carinamaria Data 30 octombrie 2025 16:50:44
Problema Cautare binara Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int n, m, tip, x;
int v[100002], log2[100002];
int main() {
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>v[i];
    }
    for(int i=1;i<=n;i++){
        log2[i]=log2[i/2]+1;
    }
    if(n!=(1<<log2[n]))
        log2[n]--;
    cin>>m;
    for(int i=1;i<=m;i++){
        cin>>tip>>x;
        int sol=0;
        int exp=log2[n];
        if(tip<=1){
            for(int bit=exp;bit>=0;bit--){
                int aux=sol+(1<<bit);
                if(aux<=n && v[aux]<=x)
                    sol=aux;
            }
            if(tip==0){
                if(v[sol]==x)
                    cout<<sol<<"\n";
                else cout<<-1<<"\n";
            }
            else cout<<sol<<"\n";
        }
        else{
            for(int bit=exp;bit>=0;bit--){
                int aux=sol+(1<<bit);
                if(v[aux]<=x-1)
                    sol=aux;
            }
            cout<<sol+1<<"\n";
        }
    }

}