Cod sursa(job #3150823)

Utilizator asparkCostea Andrei Ioan aspark Data 18 septembrie 2023 17:19:12
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

int v[100001];

int caut(int v[100001], int y, int n){

    int st = 1, dr = n;
    int ans = 1;

    while(st <= dr){
        int med = (st + dr) / 2;

        if(v[med] <= y){
            ans = med;
            st = med + 1;
        }
        else{
            dr = med - 1;
        }
    }

    return ans;

}

int caut2(int v[100001], int y, int n){

    int st = 1, dr = n;
    int ans = 1;

    while(st <= dr){
        int med = (st + dr) / 2;

        if(v[med] >= y){
            ans = med;
            dr = med - 1;
        }
        else{
            st = med + 1;
        }
    }

    return ans;

}

int main(){

    int n, m;
    fin>>n;

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

    fin>>m;
    for(int i = 1; i <= m; i++){
        int q, x;
        fin>>q>>x;

        if(q == 0){
            if(v[caut(v, x, n)] != x){
                fout<<-1<<"\n";
            }
            else{
                fout<<caut(v, x, n)<<"\n";
            }
        }
        else if(q == 1){
            fout<<caut(v, x, n)<<"\n";
        }
        else{
            fout<<caut2(v, x, n)<<"\n";
        }
    }

    return 0;
}