Cod sursa(job #1287445)

Utilizator obidanDan Ganea obidan Data 7 decembrie 2014 15:50:34
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
using namespace std;
const int NMax = 1e5 + 2;
int n;
int A[NMax];
int Binary(int val)
{
    int lo=0, hi=n+1;
    while(hi-lo>1)
    {
        int mid= lo + (hi-lo)/2;
        if(A[mid]>val)
            hi=mid;
        else
            lo=mid;
    }
    return lo;
}

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",poz+1);
        }
    }
}