Cod sursa(job #2767245)

Utilizator vlad_maneaManea Vlad Cristian vlad_manea Data 5 august 2021 13:57:05
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, m, a[100001];

int tip00(int x, int lg)
{
    int i;
    for(i=0; lg!=0; lg>>=1)
        if(i+lg<n && a[i+lg]<=x)
            i+=lg;
    if(a[i]==x)
        return i;
    else
        return -2;
}

int tip01(int x, int lg)
{
    int i;
    for(i=0; lg!=0; lg>>=1)
        if(i+lg<n && a[i+lg]<=x)
            i+=lg;
    return i;
}

int tip02(int x, int lg)
{
    int i;
    for(i=n-1; lg!=0; lg>>=1)
        if(i-lg>=0 && a[i-lg]>=x)
            i-=lg;
    return i;
}

void citire()
{
    fin>>n;
    int lg;
    for(lg=1; lg<=n; lg<<=1);
    for(int i=0; i<n; i++)
        fin>>a[i];
    int tip, val;
    fin>>m;
    for(int i=0; i<m; i++)
    {
        fin>>tip>>val;
        if(tip==0)
            fout<<tip00(val, lg)+1<<"\n";
        else if(tip==1)
            fout<<tip01(val, lg)+1<<"\n";
        else if(tip==2)
            fout<<tip02(val, lg)+1<<"\n";
    }

}

int main()
{
    citire();
    return 0;
}