Cod sursa(job #2762084)

Utilizator Iulia25Hosu Iulia Iulia25 Data 5 iulie 2021 14:27:47
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>

using namespace std;

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

const int N = 1e5 + 5;

int n;
int v[N];

void solve0(int x)  {
    int st=1, dr=n, mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[mij]<x)
            st=mij+1;
        if(v[mij]>x)
            dr=mij-1;
        if(v[mij]==x)
        {
            if(v[mij+1]==x)
                st=mij+1;
            if(v[mij+1]!=x) {
                cout<<mij << '\n';
                return;
            }
        }
    }
    cout << "-1\n";
}

void solve1(int x)  {
    int st = 1, dr = n, mij, ans = 1;
    while (st <= dr)    {
        mij = (st + dr) / 2;
        if (v[mij] > x)    {
            dr = mij - 1;
        } else    { ///v[mij] <= x
            ans = mij;
            st = mij + 1;
        }
    }
    cout << ans << '\n';
}

void solve2(int x)  {
    int st=1, dr=n, mij, ans;
    while(st<= dr)
    {
        mij=(st+dr)/2;
        if(v[mij]<x)
        {
            st=mij+1;
        }
        else {
            ans=mij;
            dr=mij-1;
        }
    }
    cout << ans << '\n';
}

int main()  {
    int q, type, x;
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> v[i];
    cin >> q;
    while (q--) {
        cin >> type >> x;
        if (type == 0)
            solve0(x);
        if (type == 1)
            solve1(x);
        if (type == 2)
            solve2(x);
    }
    return 0;
}