Cod sursa(job #2182378)

Utilizator Vaida_Radu_AndreiVaida Radu Andrei Vaida_Radu_Andrei Data 22 martie 2018 12:33:19
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <cstdio>
#include <math.h>

using namespace std;
FILE* FIN=freopen("cautbin.in","r",stdin);
FILE* FOUT=freopen("cautbin.out","w",stdout);

int n,v[100000];

void cer0(int logn)
{
    int x,i;
    scanf("%d\n",&x);
    for(i=-1,logn>>=1;logn;logn>>=1)
        if(i+logn<n&&v[i+logn]<=x)
            i+=logn;
    if(v[i]==x)
        printf("%d\n",i+1);
    else
        printf("-1\n");
}
void cer1(int logn)
{
    int x,i;
    scanf("%d\n",&x);
    for(i=-1,logn>>=1;logn;logn>>=1)
        if(i+logn<n&&v[i+logn]<=x)
            i+=logn;
    printf("%d\n",i+1);
}
void cer2(int logn)
{
    int x,i;
    scanf("%d\n",&x);
    for(i=n-1,logn>>=1;logn;logn>>=1)
        if(i-logn>=0&&v[i-logn]>=x)
            i-=logn;
    printf("%d\n",i+1);
}
int main()
{
    int q,i,logn;
    char cer;
    scanf("%d",&n);
    for(logn=1;logn<=n;logn<<=1);
    for(i=0;i<n;i++)
        scanf("%d",&v[i]);
    scanf("%d\n",&q);
    for(i=0;i<q;i++)
    {
        scanf("%c",&cer);
        if(cer=='0')
            cer0(logn);
        else
        {
            if(cer=='1')
                cer1(logn);
            else
                cer2(logn);
        }
    }
    return 0;
}