Cod sursa(job #3174845)

Utilizator luke_a_shadowLuca Vlad Andrei luke_a_shadow Data 25 noiembrie 2023 10:27:22
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int main()
{
    int n, m, v[100001], p, x;
    
    fin>>n;
    for (int i=1; i<=n; i++){
        fin>>v[i];
    }
    fin>>m;
    int i;
    for (int j=1; j<=m; j++){
        fin>>p>>x;
        int left=1, right=n;
        i=(left+right)/2;
        if (p==0){
            while ((v[i]!=x || v[i+1]==x) && right!=left){
                if(v[i]<=x){
                    left=i;
                    i=(left+right)/2;
                }
                else if(v[i]>x){
                    right=i;
                    i=(left+right)/2;
                }
            }
            if (v[i]==x){
                fout<<i;
            }
            else{
                fout<<-1;
            }
        }
        if (p==1){
            while (((v[i]<=x && v[i+1]<=x) || v[i]>x) && right!=left){
                if(v[i]<=x){
                    left=i;
                    i=(left+right)/2;
                }
                else if(v[i]>x){
                    right=i;
                    i=(left+right)/2;
                }
            }
            fout<<i;
        }
        if (p==2){
            while ((v[i]<x || (v[i]>=x && v[i-1]>=x)) && right!=left){
                if(v[i]<x){
                    left=i;
                    i=(left+right)/2;
                }
                else if(v[i]>=x){
                    right=i;
                    i=(left+right)/2;
                }
            }
            fout<<i;
        }
        fout<<endl;
    }

    return 0;
}