Cod sursa(job #2836236)

Utilizator RORO123bBarbulescu Robert RORO123b Data 19 ianuarie 2022 23:17:02
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <fstream>

using namespace std;

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

void bin0(int v[100001], int n, int a,int& poz)
{
    int st = 1, dr = n, mij;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (v[mij] == a)
            poz = mij;
            if (v[mij] <= a)
                st = mij + 1;
            if (v[mij] > a)
                dr = mij - 1;
    }
}

void bin1(int v[100001], int n, int a, int& poz)
{
    int st = 1, dr = n, mij;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (v[mij] <= a)
            poz = mij;
        if (v[mij] <= a)
            st = mij + 1;
        if (v[mij] > a)
            dr = mij - 1;
    }
}

void bin2(int v[100001], int n, int a, int& poz)
{
    int st = 1, dr = n, mij;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (v[mij] >= a)
            poz = mij;
        if (v[mij] < a)
            st = mij + 1;
        if (v[mij] >= a)
            dr = mij - 1;
    }
}


int v[100001];

int main()
{
	int n, m;
    fin >> n;
	for (int i = 1; i <= n; i++)
		fin >> v[i];
	fin >> m;
	for (int i = 1; i <= m; i++)
	{
		int cer,x,poz=-1;
		fin >> cer >> x;
        if (cer == 0)
        {
            bin0(v, n, x, poz);
            fout << poz << '\n';
        }
        if (cer == 1)
        {
            bin1(v, n, x, poz);
            fout << poz << '\n';
        }
        if (cer == 2)
        {
            bin2(v, n, x, poz);
            fout << poz << '\n';
        }
    }
}