Cod sursa(job #2664093)

Utilizator NuclearLionStaicu Dan Dominic NuclearLion Data 27 octombrie 2020 21:59:22
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.75 kb
#include <fstream>

using namespace std;

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

int N, v[100005], M, t, x;

void citire(int &n, int v[])
{
    f >> n;

    for(int i = 1; i <= n; ++ i)
        f >> v[i];
}


int main()
{
    citire(N, v);

    f >> M;

    for(int i = 1; i <= M; ++ i)
    {
        f >> t >> x;
        int st = 1, dr = N;
        bool ok = 0;
        switch(t)
        {
            case 0:
                while(st <= dr)
                {
                    int mid = (st + dr) / 2;
                    if(v[mid] == x)
                        ok = 1;
                    if(v[mid] <= x)
                        st = mid + 1;
                    else
                        dr = mid - 1;
                }
                g << (ok ? dr : -1) << '\n';
                break;

            case 1:
                while(st <= dr)
                {
                    int mid = (st + dr) / 2;
                    if(v[mid] == x)
                        ok = 1;
                    if(v[mid] <= x)
                        st = mid + 1;
                    else
                        dr = mid - 1;
                }
                g << dr << '\n';
                break;

            case 2:
                while(st <= dr)
                {
                    int mid = (st + dr) / 2;
                    if(v[mid] == x)
                        ok = 1;
                    if(v[mid] < x)
                        st = mid + 1;
                    else
                        dr = mid - 1;
                }
                g << st << '\n';
                break;

            default:
                break;
        }
    }

    f.close();
    g.close();
    return 0;
}