Cod sursa(job #1202402)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 27 iunie 2014 22:21:01
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
#include <fstream>

using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
const int MAXN = 100005;

int n;
int v[MAXN];

void rezolva0(int x)
{
    int st, dr;
    st = 1 ;
    dr = n;

    int poz = 0;
    while(dr - st > 1)
    {
        int mij = (st + dr) / 2;

        if (x < v[mij])
        {
            dr = mij;
        }
        else if (x > v[mij])
        {
            st = mij;
        }
        else if (x == v[mij])
        {
            poz = mij;
            st = mij;
        }
    }
    if (poz == 0)
    {
        out << -1 << "\n";
    }
    else
    {
        out << poz << "\n";
    }
}

void rezolva1(int x)
{
    int poz = 0;
    int st = 1, dr = n;

    while(dr - st > 1)
    {
        int mij = (st + dr) / 2;

        if (x > v[mij])
        {
            dr = mij;
        }
        else if (x <= v[mij])
        {
            st = mij;
            poz = st;
        }
    }
    out << poz << "\n";
}

void rezolva2(int x)
{
    int poz = 0;
    int st = 1, dr = n;
    while(dr - st > 1)
    {
        int mij = (st + dr) / 2;
        if (x < v[mij])
        {
            st = mij;
        }
        else if (x >= v[mij])
        {
            dr = mij;
            poz = mij;
        }
    }
    out << poz << "\n";
}
int main()
{
    in >> n;
    for (int i = 1; i <= n; i++)
    {
        in >> v[i];
    }

    int m;
    in >> m;
    for (int i = 0; i < m; i++)
    {
        int x, y;
        in >> x >> y;
        if (x == 0)
        {
            rezolva0(y);
        }
        else if (x == 1)
        {
            rezolva0(y + 1);
        }
        else if (x == 2)
        {
            rezolva2(y);
        }
    }
    return 0;
}