Cod sursa(job #2709842)

Utilizator denmirceaBrasoveanu Mircea denmircea Data 21 februarie 2021 13:37:15
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, v[100005], i, j, cer, c, x;
int cer0(int x){
    int st=1;
    int dr=n;
    /// caut cel mai mare nr<=x
    while(st<=dr){
        int mid=(st+dr)/2;
        if(v[mid]<=x){
            st=mid+1;
        }
        if(v[mid]>x)
            dr=mid-1;
    }
    if(v[dr]!=x)
        return -1;
    return dr;





}
int cer1(int x){
    int st=1;
    int dr=n;
    /// caut cel mai mare nr<=x
    while(st<=dr){
        int mid=(st+dr)/2;
        if(v[mid]<=x){
            st=mid+1;
        }
        if(v[mid]>x)
            dr=mid-1;
    }
    return dr;
}
int cer2(int x){
    int st=1;
    int dr=n;
    /// csut cel mai din stanga element cu valoare mai mare sau egala cu x
    while(st<=dr){
        int mid=(st+dr)/2;
        if(v[mid]>=x){
            dr=mid-1;
        }
        if(v[mid]<x){
            st=mid+1;
        }
    }
    return st;
}
int main() {
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    fin>>c;
    for(i=1;i<=c;i++){
        fin>>cer>>x;
        if(cer==0){
            fout<<cer0(x)<<"\n";

        }
        else{
            if(cer==1){
                fout<<cer1(x)<<"\n";

            }
            else{
                fout<<cer2(x)<<"\n";
            }
        }
    }


}