Cod sursa(job #2720668)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 11 martie 2021 09:53:07
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include<bits/stdc++.h>

using namespace std;

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

long long v[100005];
int n,m,poz;

void binsearch0(long long val, int left, int right){
    if(left > right){
        return;
    }
    int mid = left + (right-left)/2;
    if(v[mid] == val){
        poz = mid;
        binsearch0(val,mid+1,right);
    }else{
        if(val > v[mid]){
            binsearch0(val,mid+1,right);
        }else{
            binsearch0(val,left,mid-1);
        }
    }
}

void binsearch1(long long val, int left, int right){
    if(left > right){
        return;
    }
    int mid = left + (right-left)/2;
    if(v[mid] <= val){
        poz = mid;
        binsearch1(val, mid+1, right);
    }else{
        binsearch1(val, left, mid-1);
    }
}

void binsearch2(long long val, int left, int right){
    if(left > right){
        return;
    }
    int mid = left + (right-left)/2;
    if(v[mid] >= val){
        poz = mid;
        binsearch2(val,left,mid-1);
    }else{
        binsearch2(val,mid+1,right);
    }
}

int main(){
    int i;
    long long a,b;
    fin>>n;
    for(i = 1; i <= n; i++){
        fin>>v[i];
    }
    fin>>m;
    for(i = 1; i <= m; i++){
        fin>>a>>b;
        if(a == 0){
            poz = -1;
            binsearch0(b,1,n);
            fout<<poz<<'\n';
        }else if(a == 1){
            poz = 0;
            binsearch1(b,1,n);
            fout<<poz<<'\n';
        }else if(a == 2){
            poz = 0;
            binsearch2(b,1,n);
            fout<<poz<<'\n';
        }
    }
	return 0;
}