Cod sursa(job #2604410)

Utilizator BogdanRuleaBogdan Rulea BogdanRulea Data 22 aprilie 2020 16:59:08
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");

int n,m,x[100001],t,v;
int lg;
int main()
{
    cin>>n;
    for(lg=1;lg<=n;lg<<=1);
    for(int i=1;i<=n;i++)
        cin>>x[i];
    cin>>m;
    for(;m;--m)
    {
        cin>>t>>v;
        if(t<2)
        {
            int i,ans;
            for(ans=lg,i=0;ans;ans>>=1)
            {
                if(i+ans<=n && x[i+ans]<=v)
                    i+=ans;
            }
            cout<<(t==0 && v!=x[i]?-1:i)<<endl;
            continue;
        }
        else
        {
            int i,ans;
            for(ans=lg,i=n;ans;ans>>=1)
            {
                if(i-ans>0 && x[i-ans]>=v)
                    i-=ans;
            }
            cout<<i<<endl;
            continue;
        }
    }
    return 0;
}