Cod sursa(job #2832520)

Utilizator cameleonGeorgescu Dan cameleon Data 13 ianuarie 2022 20:59:07
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>
using namespace std;
#define NMAX 100005

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[NMAX], n, m, x;

int cerinta1()
{
    int st = 1, dr = n, mij;
    int poz = -1;

    while(st <= dr){
        mij = (st+dr)/2;
        if(x == v[mij]){
            poz = mij;
            st = mij+1;
        }
        else
            if(x < v[mij])
                dr = mij-1;
            else
                if(x > v[mij])
                    st = mij+1;

    }
    return poz;
}

int cerinta2()
{
    int st = 1, dr = n, mij;
    int poz = -1;

    while(st <= dr){
        mij = (st+dr)/2;
        if(v[mij] <= x){
            poz = mij;
            st = mij+1;
        }
        else
            dr = mij-1;
    }
    return poz;

}

int cerinta3()
{
    int st = 1, dr = n, mij;
    int poz = -1;

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

}

int main()
{
    int task;
    fin >> n;
    for(int i = 1; i <= n; ++i)
        fin >> v[i];

    fin >> m;
    for(int i = 1; i <= m; i++){
        fin >> task >> x;
        switch(task)
        {
           case 0: fout << cerinta1() << '\n'; break;
           case 1: fout << cerinta2() << '\n'; break;
           case 2: fout << cerinta3() << '\n'; break;
        }
    }
}