Cod sursa(job #1862584)

Utilizator NicusorTelescu Nicolae Nicusor Data 30 ianuarie 2017 08:26:30
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>

using namespace std;

int v[100001];

int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    int n,m;
    scanf("%d ",&n);
    for (int i=1;i<=n;i++)
        scanf("%d ",&v[i]);
    scanf("%d ",&m);
    int step=1,step1=1;
    for (step=1;step<=n;step<<=1);
    step1=step;
    for (int k=1;k<=m;k++)
    {
        int a,b;
        scanf("%d %d",&a,&b);
        step=step1;
        int i=1;
        if (a==0)
        {
            for (i=1;step;step>>=1)
                if (i+step<=n && v[i+step]<=b)
                    i+=step;
            if (v[i]!=b) printf("-1\n");
            else printf("%d\n",i);
        }
        if (a==1)
        {
            for (i=1;step;step>>=1)
                if (i+step<=n && v[i+step]<=b)
                    i+=step;
            printf("%d\n",i);
        }
        if (a==2)
        {
            for (i=1;step;step>>=1)
                if (i+step<=n && v[i+step]<b)
                    i+=step;
            printf("%d\n",i+1);
        }
    }
}