Cod sursa(job #3229254)

Utilizator david_nicolescuNicolescu David Stefan david_nicolescu Data 14 mai 2024 20:10:13
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.86 kb
#include <fstream>

using namespace std;

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

int v[100001];

int cautBin(int v[], int n, int val)
{
    int st = 1, dr = n, poz=0;
    while (st <= dr && poz==0)
    {
        int mij = (st + dr) / 2;
        if (v[mij]==val)
        {
            return mij;
        }
        else
        {
            if(v[mij]>=val)
            {
                st = mij + 1;
            }
            else
            {
                dr = mij - 1;
            }
        }
    }
    if (poz==0)
    {
        return -1;
    }
}

int cautBin1(int v[], int n, int val)
{
    int st = 1, dr = n, poz=n+1;
    while (st <= dr)
    {
        int mij = (st + dr) / 2;
        if (v[mij]>=val)
        {
            poz=mij;
            dr=mij-1;
        }
        else
        {
            st=mij+1;
        }
    }
    return poz;

}

int cautBin2(int v[], int n, int val)
{
    int st = 1, dr = n, poz=n+1;
    while (st <= dr)
    {
        int mij = (st + dr) / 2;
        if (v[mij]<=val)
        {
            poz=mij;
            dr=mij-1;
        }
        else
        {
            st=mij+1;
        }
    }
    return poz;

}

int main()
{
    int n,c,x,m,rasp;
    in>>n;
    for (int i=1; i<=n; i++)
    {
        in>>v[i];
    }
    in>>m;
    for (int i=1; i<=m; i++)
    {
        in >> c >> x;
        if (c==0)
        {
            rasp=cautBin(v,n,x);
            int j = rasp;
            while (v[j] == v[rasp])
                j ++;
            rasp = j - 1;
            out<<rasp<<'\n';
        }
        else if (c==1)
        {
            rasp=cautBin1(v,n,x);
            out<<rasp<<'\n';
        }
        else if (c==2)
        {
            rasp=cautBin2(v,n,x);
            out<<rasp<<'\n';
        }
    }
    return 0;
}