Cod sursa(job #2037222)

Utilizator misha1254Mihai Stefanuti misha1254 Data 11 octombrie 2017 21:33:49
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.62 kb
#include <fstream>
using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100000], inst, n, numar, m, M;
void Read();
int inst0(int v[], int l, int r, int m);
int inst1(int v[], int l, int r, int m);
int inst2(int v[], int l, int r, int m);

int main()
{
    int l, r, m;
    Read();
    fin >> inst >> numar;

    while (M)
    {
        if (inst == 0)
            inst0(v, l, r, m);
        if (inst == 1)
            inst1(v, l, r, m);
        if (inst == 2)
            inst2(v, l, r, m);
        --M;
    }


    fin.close();
    fout.close();
}

int inst0(int v[], int l, int r, int m)
{
    l = 0;
    r = n - 1;

    while (l < r)
    {
        m = (l + r) / 2;
        if (v[m] == numar)
            return m;
        if (numar > v[m])
            l = m + 1;
        if (numar < v[m])
            r = m - 1;
    }
}

int inst1(int v[], int l, int r, int m)
{
    l = 0;
    r = n - 1;
    int numero;
    while (l < r)
    {
        m = (l + r) / 2;
        if (v[m] <= numar)
            numero = m;
        if (numar > v[m])
            l = m + 1;
        if (numar < v[m])
            r = m - 1;
    }
    fout << m;
}

int inst2(int v[], int l, int r, int m)
{
    l = 0;
    r = n - 1;
    int numero;
    while (l < r)
    {
        m = (l + r) / 2;
        if (v[m] >= numar)
            numero = m;
        if (numar > v[m])
            l = m + 1;
        if (numar < v[m])
            r = m - 1;
    }
    fout << m;
}

void Read()
{
    fin >> n;
    for (int i = 0; i < n; ++i)
        fin >> v[i];
    fin >> M;
}