Cod sursa(job #2181175)

Utilizator Vaida_Radu_AndreiVaida Radu Andrei Vaida_Radu_Andrei Data 21 martie 2018 15:03:48
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 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,logn,v[100000];

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