Cod sursa(job #1569583)

Utilizator Emy1337Micu Emerson Emy1337 Data 15 ianuarie 2016 19:00:23
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int n,m;
int v[100010];

int BS_0(int nr) // ultimul pozitie a numarului nostru in vector
{
    int st = 1, dr = n, last = -1;

    while (st <= dr)
    {
        int m = (st + dr) / 2;
        if (v[m] <= nr)
        {
            last = m;
            st = m + 1;
        }
        else
            dr = m - 1;
    }

    if (last == -1)
        return - 1;

    return (v[last] == nr) ? last : -1;
}


int BS_1(int nr) // upper_bound
{

    int st = 1, dr = n, last = -1;
    while(st<=dr)
    {
        int m = (st + dr) / 2;
        if(v[m]<=nr){
            last = m;
            st=m+1;
        }
        else
            dr=m-1;
    }
    return last;
}

int BS_2(int nr) //lower_bound
{

    int st = 1, dr = n, last = -1;
    while(st<=dr)
    {
        int m = (st + dr) / 2;
        if(v[m]>=nr){
            last = m;
            dr=m-1;
        }
        else
            st=m+1;
    }
    return last;
}



int main()
{
    fin>>n;
    for(int i=1; i<=n; i++)
        fin>>v[i];

    fin>>m;
    for(int i=1; i<=m; i++)
    {
        int tip,nr,x;
        fin>>tip>>nr;
        if(tip==0)
            fout<<BS_0(nr)<<"\n";
        else if(tip==1)
            fout<<BS_1(nr)<<"\n";
        else
            fout<<BS_2(nr)<<"\n";
    }
}