Cod sursa(job #2334527)

Utilizator Vasilescu_CosminVasilescu Cosmin Vasilescu_Cosmin Data 2 februarie 2019 18:10:20
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in ("cautbin.in");
ofstream out ("cautbin.out");

int cautbin(int val, int n, int v[])
{
    int pos=0,msk;
    for(msk=1<<20; msk>0; msk/=2)
        if(pos+msk<=n && v[pos+msk]<=val)
            pos+=msk;
    if(v[pos]==val)
        return pos;
    else
        return -1;
}

int main()
{
    int v[1000000];
    int cc=1,j,n,i,ins,m,x;
    in>>n;
    for(i=1; i<=n; i++)
        in>>v[i];
    in>>m;
    for(i=1; i<=m; i++)
    {
        in>>ins>>x;
        if(ins==0)
            out<<cautbin(x,n,v)<<'\n';
        if(ins==1)
        {
            for(j=x; j>0; j--)
            {
                if(cautbin(j,n,v)!=-1)
                {
                    out<<cautbin(j,n,v)<<'\n';
                    break;
                }
            }
        }
        if(ins==2)
        {
            for(j=x; j<=n; j++)
            {
                if(cautbin(j,n,v)!=-1)
                {
                    cc=cautbin(j,n,v);
                    break;
                }
            }
            while(v[cc]==j)
            {
                cc--;
            }
            cc++;
            out<<cc<<'\n';
        }
    }
    return 0;
}