Cod sursa(job #1290097)

Utilizator j.loves_rockJessica Joanne Patrascu j.loves_rock Data 10 decembrie 2014 20:30:54
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
using namespace std;
const int NMax = 1e5 + 2;
int n;
int A[NMax];
int Binary(int val)
{
    int poz=0, pas=(1<<17); // log2 of NMax
    while(pas>>=1)
    {
        if( (pas+poz<=n) && A[pas+poz]<=val)
            poz+=pas;
    }
    return poz;
}
int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    int i,op,x,m,poz;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&A[i]);

    scanf("%d",&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d %d",&op,&x);
        if(op == 0)
        {
            poz=Binary(x);
            if(A[poz] == x ) printf("%d\n",poz);
            else
                printf("-1\n");

        }
        else if(op == 1)
        {
            poz=Binary(x);
            printf("%d\n",poz);
        }
        else
        {
            poz=Binary(x-1);
            printf("%d\n",poz+1);
        }
    }
}