Cod sursa(job #2501723)

Utilizator Ionut10Floristean Ioan Ionut10 Data 30 noiembrie 2019 09:53:28
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>
#define DimMax 100005
using namespace std;

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

int n, m;
int tip, x;
int v[DimMax];

int bsearch0(int x)
{
    int st = 1, dr = n;
    int sol = -1;
    while(st <= dr)
    {
        int mij = st + (dr - st) / 2;
        if(v[mij] <= x)
        {
            if(v[mij] == x) sol = mij;
            st = mij + 1;
        }else dr = mij - 1;
    }
    return sol;
}

int bsearch1(int x)
{
    int st = 1, dr = n;
    int sol = -1;
    while(st <= dr)
    {
        int mij = st + (dr - st) / 2;
        if(v[mij] <= x)
        {
            sol = mij;
            st = mij + 1;
        }else dr = mij - 1;
    }
    return sol;
}

int bsearch2(int x)
{
    int st = 1, dr = n;
    int sol = -1;
    while(st <= dr)
    {
        int mij = st + (dr - st) / 2;
        if(v[mij] < x)
            st = mij + 1;
        else {dr = mij - 1; sol = mij;}
    }
    return sol;
}
int main()
{
    fin>>n;
    for(int i = 1;i <= n;i++)
        fin>>v[i];
    fin>>m;
    for(int i = 1;i <= m;i++)
    {
        fin>>tip>>x;
        if(tip == 0) fout<<bsearch0(x)<<'\n';
        if(tip == 1) fout<<bsearch1(x)<<'\n';
        if(tip == 2) fout<<bsearch2(x)<<'\n';
    }
    return 0;
}