Cod sursa(job #2793433)

Utilizator francescom_481francesco martinut francescom_481 Data 3 noiembrie 2021 17:28:25
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
#define cin fin
#define cout fout

#define N 20
int n, q, v[N], cerinta, x;

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

int main()
{
    cin >> n;
    for(int i = 1 ; i <= n ; i++)
    {
        cin >> v[i];
    }
    cin >> q;
    for( ; q ; q--)
    {
        cin >> cerinta >> x;
        if(cerinta == 0)
        {
            cout << caut0(1,n,x);
        }
        else if(cerinta == 1)
        {
            cout << caut1(1,n,x);
        }
        else if(cerinta == 2)
        {
            cout << caut2(1,n,x);
        }
        cout << '\n';
    }
    return 0;
}