Cod sursa(job #2436247)

Utilizator Dragos1226Dragos Chileban Dragos1226 Data 5 iulie 2019 11:52:03
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <bits/stdc++.h>
using namespace std;

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

int imax,imin;

void binarysearch0(int v[],int x,int low,int hi) {
    int m;
    if(low<=hi) {
        m=low + (hi-low)/2;
        if(v[m]==x)
            if(m>imax)
            imax=m;
        if(x>=v[m]) binarysearch0(v,x,m+1,hi);
        else binarysearch0(v,x,low,m-1);
    }
}

void binarysearch1(int v[],int x,int low,int hi) {
    int m;
    if(low<=hi) {
        m=low + (hi-low)/2;
        if(v[m]<=x)
            if(m>imax)
            imax=m;
        if(x>=v[m]) binarysearch1(v,x,m+1,hi);
        else binarysearch1(v,x,low,m-1);
    }
}

void binarysearch2(int v[],int x,int low,int hi) {
    int m;
    if(low<=hi) {
        m=low + (hi-low)/2;
        if(v[m]>=x)
            if(m<imin)
            imin=m;
        if(x<=v[m]) binarysearch2(v,x,low,m-1);
        else binarysearch2(v,x,m+1,hi);
    }
}

int main() {
    int n,v[100000],m,x,q;
    in>>n;
    for(int i=0;i<n;i++)
    {
        in>>v[i];
    }
    in>>m;
    for(int i=0;i<m;i++)
    {
        in>>q>>x;
        if(q==0){imax=-1;binarysearch0(v,x,0,n-1);if(imax==-1)out<<-1<<'\n'; else out<<imax+1<<'\n';}
        if(q==1){imax=-1;binarysearch1(v,x,0,n-1);out<<imax+1<<'\n';}
        if(q==2){imin=100001;binarysearch2(v,x,0,n-1);out<<imin+1<<'\n';}
    }
}