Cod sursa(job #2495110)

Utilizator Ionut10Floristean Ioan Ionut10 Data 18 noiembrie 2019 21:38:27
Problema Cautare binara Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <bits/stdc++.h>
#define DimMax 100005

using namespace std;

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

int ultim[DimMax];
int n, m;
int a, b;
int v[DimMax];

void Fa1(int x)
{
    int sol1, sol2;
    long long st = 1, dr = n;
    while(st <= dr)
    {
        long long mij = (st + dr) / 2;
        if(v[mij] <= x)
        {
            st = mij + 1;
            sol1 = mij;
        }
        else if(v[mij] > x)
            dr = mij - 1;
    }
    fout<<sol1<<'\n';
}

void Fa2(int x)
{
    int sol1, sol2;
    long long st = 1, dr = n;
    while(st <= dr)
    {
        long long mij = (st + dr) / 2;
        if(v[mij] < x)
        {
            st = mij + 1;
        }
        else if(v[mij] >= x)
        {
            dr = mij - 1;
            sol2 = mij;
        }
    }
    fout<<sol2<<'\n';
}
int main()
{
    fin>>n;
    for(int i = 1;i <= n;i++)
    {
        fin>>v[i];
        ultim[v[i]] = i;
    }
    sort(v + 1, v + n + 1);
    fin>>m;
    for(int i = 1;i <= m;i++)
    {
        fin>>a>>b;
        if(a == 0)
        {
        if(ultim[b] == 0) fout<<-1<<'\n';
        else fout<<ultim[b]<<'\n';
        }
        else if(a == 1) Fa1(b);
        else if(a == 2) Fa2(b);
    }
    return 0;
}