Cod sursa(job #2035255)

Utilizator ZarisZaris Neamtiu Zaris Data 9 octombrie 2017 09:40:30
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include<bits/stdc++.h>
using namespace std;

int n, a[100001];

int Search(int l, int r, int v)
{
    int m, poz = -1;

    while (l <= r)
    {
        m = (l + r) / 2;

        if (a[m] <= v)
            l = m + 1;
        else
            r = m - 1;

        if (a[m] == v)
            poz = m;
    }
    return poz;
}

int Search1(int l, int r, int v)
{
    int m, poz = -1;

    while (l <= r)
    {
        m = (l + r) / 2;

        if (a[m] <= v)
        {
            l = m + 1;
            poz = m;
        }

        else
            r = m - 1;
    }
    return poz;
}

int Search2(int l, int r, int v)
{
    int m, poz = -1;

    while (l <= r)
    {
        m = (l + r) / 2;

        if (a[m] >= v)
        {
            r = m - 1;
            poz = m;
        }
        else
            l = m + 1;
    }
    return poz;
}

int main()
{
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");

    int m, x, val;

    fin >> n;

    for(int i = 1; i <= n; ++i)
        fin >> a[i];

    fin >> m;

    for(int i = 1; i <= m; ++i)
    {
        fin >> x >> val;

        if(!x)
            fout << Search(1, n, val) << '\n';

        if(x == 1)
            fout << Search1(1, n, val) << '\n';

        if(x == 2)
            fout << Search2(1, n, val) << '\n';
    }
    return 0;
}