Cod sursa(job #2404912)

Utilizator Razvan_GabrielRazvan Gabriel Razvan_Gabriel Data 13 aprilie 2019 16:13:50
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#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(){
    ifstream fin("cautare.in");
    ofstream fout("cautare.out");

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

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

    return 0;
}