Cod sursa(job #1839527)

Utilizator SagunistuStrimbu Alexandru Sagunistu Data 3 ianuarie 2017 00:18:30
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <cstdio>

using namespace std;

int n,a[100005],m;

int caut_bin(int x)
{
    int li=1,lf=n,m;
    while(li<=lf)
    {
        m=(li+lf)/2;
        if(a[m]==x)
            return m;
        if(a[m]<x)
        {
            li=m+1;
            continue;
        }
        lf=m-1;
    }
}

int main()
{
    int t,nr;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&t,&nr);
        int cb=caut_bin(nr);
        if(t==0)
        {
            if(a[cb]==nr)
            {
                while(a[cb]==nr)
                    cb++;
                printf("%d\n",cb-1);
            }
            else
                printf("-1\n");
        }
        else
        if(t==1)
        {
            if(a[cb]==nr)
            {
                while(a[cb]==nr)
                    cb++;
                printf("%d\n",cb-1);
            }
            else
                printf("%d\n",cb-1);
        }
        else
        {
            if(a[cb]==nr)
            {
                while(a[cb]==nr)
                    cb--;
                printf("%d\n",cb+1);
            }
            else
                printf("%d\n",cb);
        }
    }
    return 0;
}