Cod sursa(job #2404914)

Utilizator Razvan_GabrielRazvan Gabriel Razvan_Gabriel Data 13 aprilie 2019 16:14:37
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#define L 16

using namespace std;

int v[100001];
int n;

int caut0(int x){
    int r=0,pas=1<<L;
    while(pas!=0){
        if(r+pas<=n && v[r+pas]<=x){
            r+=pas;
        }
        pas/=2;
    }
    if(v[r]!=x)
        return -1;
    return r;
}

int caut1(int x){
    int r=0,pas=1<<L;
    while(pas!=0){
        if(r+pas<=n && v[r+pas]<=x){
            r+=pas;
        }
        pas/=2;
    }
    return r;
}

int caut2(int x){
    int r=0,pas=1<<L;
    while(pas!=0){
        if(r+pas<=n && v[r+pas]<x){
            r+=pas;
        }
        pas/=2;
    }
    r++;
    return r;
}

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

    cin>>m;
    for(int i=0;i<m;i++){
        int c;
        int x;
        cin>>c>>x;
        if(c==0){
            cout<<caut0(x)<<"\n";
        }else if(c==1){
            cout<<caut1(x)<<"\n";
        }else{
            cout<<caut2(x)<<"\n";
        }
    }

    return 0;
}