Cod sursa(job #2493445)

Utilizator sorana5Gligor Sorana sorana5 Data 16 noiembrie 2019 12:31:07
Problema Cautare binara Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.74 kb
#include <iostream>
#include <fstream>

using namespace std;

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



int v[100001];



void a0 (int x, int st, int dr)
{
    int raspuns;
    int mid = (st + dr) / 2;
    while (st != dr)
    {
        if (v[mid] > x)
        {
            dr = mid;
        }
        else
        {
            st = mid + 1;
            if (v[mid] == x)
                raspuns = mid;
        }
        if (raspuns != mid)
            raspuns = -1;
        mid = (st + dr) / 2;
    }
    g<<raspuns<<'\n';
}
void a1 (int x, int st, int dr)
{
    int raspuns;
    int mid = (st + dr) / 2;
    while (st < dr)
    {
        if (v[mid] > x)
            dr = mid;
        else
        {
            st = mid + 1;
            raspuns = mid;
        }

        mid = (st + dr) / 2;
    }
    g<<raspuns<<'\n';
}

void a2(int x, int st, int dr)
{
    int raspuns;
    int mid = (st + dr) / 2;
    while (st != dr)
    {
        if (v[mid] < x)
        {
            st = mid + 1;
        }
        else
        {
            dr = mid;
            raspuns = mid;
        }
        mid = (st + dr ) / 2;
    }
    g<<raspuns<<'\n';
}

int main()
{
    int n, x, dr, st, mid, a, m, b[100000], raspuns;
    f>>n;
    for (int i = 1; i <= n; i++)
    {
        f>>v[i];
    }
    f>>m;
    int M = m;
    while (m > 0)
    {
        f>>a>>x;
        st = 1;
        dr = n + 1;
        mid = (st + dr) / 2;

        if (a == 1)
        {
            a1(x, st, dr);
        }
        if (a == 0)
        {
            a0(x, st, dr);
        }

        if (a == 2)
        {
            a2(x, st, dr);
        }
        m = m - 1;
    }

    return 0;
}