Cod sursa(job #3222486)

Utilizator Gabi_Gabriela Lup Gabi_ Data 10 aprilie 2024 14:16:50
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.7 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int cautare0(int v[], int n, int y)
{
    int st = 1, dr = n, pos = -1, mij;
    while(st <= dr)
    {
         mij = (st + dr) / 2;
        if (v[mij] == y)
        {
            st = mij + 1;
            pos = mij;
        }
        else
            if (v[mij] > y)
                dr = mij - 1;
            else
                st = mij + 1;
    }
    return pos;
}

int cautare1(int v[], int n, int y)
{
    int st = 1, dr = n, mij, pos;
    if (cautare0(v, n, y) != - 1)
        return cautare0(v, n, y);
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (v[mij] > y)
            dr = mij - 1;
        else
            if (v[mij] <= y)
            {
                st = mij + 1;
                pos = mij;
            }
    }
    return pos;
}

int cautare2(int v[], int n, int y)
{
    int st = 1, dr = n, mij, pos;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (v[mij] < y)
            st = mij + 1;
        else
            if (v[mij] >= y)
            {
                dr = mij - 1;
                pos = mij;
            }
    }
    return pos;
}

int main()
{
    int N, M, x, y;
    fin >> N;
    int v[N + 1];
    for (int i = 1; i <= N; i ++)
        fin >> v[i];
    fin >> M;
    for (int i = 1; i <= M; i ++)
    {
        fin >> x >> y;
        if (x == 0)
            fout << cautare0(v, N, y) << '\n';
        else
            if (x == 1)
                fout << cautare1(v, N, y) << '\n';
        else
            fout << cautare2(v, N, y) << '\n';
    }


    return 0;
}