Cod sursa(job #3207114)

Utilizator bg16-2009bg16 bg16 bg16-2009 Data 25 februarie 2024 11:44:07
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include<bits/stdc++.h>

using namespace std;

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

int n, v[100005], m;

bool check0(int ind, int val){
    return v[ind]<=val;
}

bool check1(int ind, int val){
    return v[ind]<=val;
}

bool check2(int ind, int val){
    return v[ind]<val;
}

bool check(int type, int ind, int val){
    switch(type){
        case 0:
            return check0(ind, val);
        case 1:
            return check1(ind, val);
        case 2:
            return check2(ind, val);
    }
}

int cautbin(int type, int val){
    int pas = 1<<16, sol=0;
    while(pas){
        if(check(type, sol+pas, val) && sol+pas<=n && sol+pas>=1){
            sol+=pas;
        }
        pas>>=1;
    }
    if(v[sol] != val && type == 0){
        return -1;
    }
    if(type==2){
        return sol+1;
    }
    return sol;
}

int main(){
    fin>>n;
    for(int i=1;i<=n;i++){
        fin>>v[i];
    }
    fin>>m;
    for(int i=1;i<=m;i++){
        int type, val;
        fin>>type>>val;
        fout<<cautbin(type, val)<<"\n";
    }
    return 0;
}