Cod sursa(job #2430079)

Utilizator Alex_DiaconuDiaconu Alexandru Alex_Diaconu Data 12 iunie 2019 17:16:12
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>

using namespace std;

ifstream ci ("cautbin.in");
ofstream co ("cautbin.out");

const int nmax=100000;
int v[nmax+1];

int main ()
{
    int n;
    ci >> n;
    for (int i=1; i<=n; i++)
    {
        ci >> v[i];
    }
    int n2=1;
    while (n2<=n)
    {
        n2*=2;
    }
    n2/=2;
    int m;
    ci >> m;
    for (int j=1; j<=m; j++)
    {
        int x,y;
        ci >> x >> y;
        if (x==1)
        {
            int sol=0,i=n2;
            while (i>0)
            {
                if (sol+i<=n && v[sol+i]<=y)
                {
                    sol+=i;
                }
                i/=2;
            }
            co << sol << "\n";
        }
        else if (x==0)
        {
            int sol=0,i=n2;
            while (i>0)
            {
                if (sol+i<=n && v[sol+i]<=y)
                {
                    sol+=i;
                }
                i/=2;
            }
            if (v[sol]==y)
            {
                co << sol << "\n";
            }
            else
            {
                co << -1 << "\n";
            }
        }
        else
        {
            int sol=n+1,i=n2;
            while (i>0)
            {
                if (sol-i>=1 && v[sol-i]>=y)
                {
                    sol-=i;
                }
                i/=2;
            }
            co << sol << "\n";
        }
    }
    return 0;
}