Cod sursa(job #2923513)

Utilizator AlexandraRusRus Alexandra Maria AlexandraRus Data 15 septembrie 2022 09:42:43
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>

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

int poz1(int n, int a[], int element)
{
    int st=1, dr=n, mij;
    while(st<dr)
    {
        mij=(st+dr+1)/2;
        if(element<a[mij])
            dr=mij-1;
        else
            st=mij+1;
    }
    if(a[st-1]==element)
        return st-1;
    if(st==dr && a[st]==element)
        return st;
    return -1;
}

int poz2(int n, int a[], int element)
{
    int st=1, dr=n, mij;
    while(st<dr)
    {
        mij=(st+dr+1)/2;
        if(element<a[mij])
            dr=mij-1;
        else
            st=mij+1;
    }
    if(a[st-1]==element)
        return st-1;
    if(st==dr && a[st]==element)
        return st;
    return -1;
}

int poz3(int n, int a[], int element)
{
    int st=1, dr=n, mij;
    while(st<dr)
    {
        mij=(st+dr+1)/2;
        if(element>a[mij])
            st=mij+1;
        else
            dr=mij-1;
    }
    if(a[dr+1]==element)
        return dr+1;
    if(st==dr && a[st]==element)
        return st;
    return -1;
}

int main()
{
    int n, F[100001], m, a, b;
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>F[i];
    fin>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>a>>b;
        if(a==0)
            fout<<poz1(n, F, b)<<endl;
        if(a==1)
            fout<<poz2(n, F, b)<<endl;
        if(a==2)
            fout<<poz3(n, F, b)<<endl;
    }

    return 0;
}