Cod sursa(job #2283569)

Utilizator Iorgus08Iorgus Serghei Cicala Iorgus08 Data 15 noiembrie 2018 17:28:31
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>

#include <fstream>



using namespace std;



const int L=17;

int n,m;

int v[100005];



int caut0(int x)

{

    int r=0,pas=1<<L;

    while (pas!=0)

    {

        if (r+pas<=n && v[r+pas]<=x)

        {

            r+=pas;

        }

        pas/=2;

    }

    if (v[r]!=x)

    {

        r=-1;

    }

    return r;

}



int caut1(int x)

{

    int r=0,pas=1<<L;

    while (pas!=0)

    {

        if (r+pas<=n && v[r+pas]<=x)

        {

            r+=pas;

        }

        pas/=2;

    }

    return r;

}



int caut2(int x)

{

    int r=0,pas=1<<L;

    while (pas!=0)

    {

        if (r+pas<=n && v[r+pas]<x)

        {

            r+=pas;

        }

        pas/=2;

    }

    r++;

    return r;

}





int main()

{

    ifstream in("cautbin.in");

    ofstream out("cautbin.out");

    in>>n;

    for (int i=1;i<=n;i++)

    {

        in>>v[i];

    }

    in>>m;

    int intr,x;

    for (int i=1;i<=m;i++)

    {

        in>>intr>>x;

        if (intr==0) out<<caut0(x)<<"\n";

        else

        if (intr==1) out<<caut1(x)<<"\n";

        else

            out<<caut2(x)<<"\n";

    }

    in.close();

    out.close();

    return 0;

}