Cod sursa(job #2075002)

Utilizator cristina-criCristina cristina-cri Data 25 noiembrie 2017 10:42:06
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <cstdio>

using namespace std;

int a[100005],n,m,c,x,lg;

int c01(int lg,int c)
{
    int i;
    for(i=0;lg!=0;lg>>=1)
        if(i+lg<=n && a[i+lg]<=x)
            i+=lg;
    if(a[i]!=x &&c ==0)
        return -1;
    return i;
}
int c2(int lg)
{
    int i;
    for(i=n;lg!=0;lg>>=1)
        if(i-lg>0 && a[i-lg]>=x)
            i-=lg;
    return i;
}

int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);

    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);

    for(lg=1;lg<=n;lg<<=1);

    scanf("%d",&m);

    for(int i=1;i<=m;i++)
    {
        scanf("%d %d",&c,&x);
        if(c<2)
        {
            printf("%d\n",c01(lg,c));
            continue;
        }
        printf("%d\n",c2(lg));
    }

    return 0;
}