Cod sursa(job #2788229)

Utilizator Seby_AAvram Sebastian Seby_A Data 25 octombrie 2021 12:25:13
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int cautbin0(int a[100],int x,int n){
    int mid,rg,lf;
    lf=n;
    rg=1;
    mid=rg+(lf-rg)/2;
    while(rg<=lf){
        if(x>=a[mid])
            rg=mid+1;
        else
            lf=mid-1;
        mid=rg+(lf-rg)/2;
    }
    if(lf>=1 && a[lf]==x)
        return lf;
    else
        return -1;
}

int cautbin1(int a[100],int x,int n){
    int mid,rg,lf;
    lf=n;
    rg=1;
    mid=rg+(lf-rg)/2;
    while(rg<=lf){
        if(x>=a[mid])
            rg=mid+1;
        else
            lf=mid-1;
        mid=rg+(lf-rg)/2;
    }
    if(lf>=1 && a[lf]<=x)
        return lf;
    else
        return 1;
}

int cautbin2(int a[100],int x,int n){
    int mid,rg,lf;
    lf=n;
    rg=1;
    mid=rg+(lf-rg)/2;
    while(rg<=lf){
        if(x<=a[mid])
            lf=mid-1;
        else
            rg=mid+1;
        mid=rg+(lf-rg)/2;
    }
    if(rg<=n && a[rg]>=x)
        return rg;
    else
        return n;
}

int main()
{
    int n,m,a[100010],tip,val;
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>a[i];
    fin>>m;
    while(m--){
        fin>>tip>>val;
        if(tip==0){
            fout<<cautbin0(a,val,n);
            fout<<'\n';
        }
        if(tip==1){
            fout<<cautbin1(a,val,n);
            fout<<'\n';
        }
        if(tip==2){
            fout<<cautbin2(a,val,n);
            fout<<'\n';
        }
    }
    return 0;
}