Cod sursa(job #2287992)

Utilizator mihailescu_eduardMihailescu Eduard-Florin mihailescu_eduard Data 22 noiembrie 2018 18:59:58
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>

FILE *fin = freopen("cautbin.in","r",stdin);
FILE *fout = freopen("cautbin.out","w",stdout);

static const int NMAX = 1e5+5;

int n,m;
int v[NMAX];

int main()
{
    scanf("%d",&n);
    for(int i =1; i<= n; ++i)
        scanf("%d",&v[i]);
    scanf("%d",&m);

    int logN = 1;
    for(;logN<=n;logN<<=1);

    int p,x;

    for(int i = 1; i<= m; ++i)
    {
        scanf("%d%d",&p, &x);
        int k = 0;
        if(p < 2)
        {
            
            for(int lg = logN; lg; lg>>=1)
            {
                if(k + lg <= n)
                {
                    if(v[k+lg] <= x)
                        k+=lg;
                }
            }
            if(!p && v[k] != x)
                printf("-1\n");
            else
                printf("%d\n",k);
        }
        else
        {
            for(int lg = logN; lg; lg >>=1)
            {
                if(k + lg <= n)
                {
                    if(v[k+lg] < x)
                        k+=lg;
                }
            }
            printf("%d\n",k+1);
        }

    }
    return 0;
    
}