Cod sursa(job #1614484)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 25 februarie 2016 22:55:04
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <cstdio>
#include <vector>
#define nmax 100005
using namespace std;

int m,n,poz,tip;
int x[nmax];

inline int tipu1(int k)
{
    int i=0,p=poz;
    for(; p>0 && i<=n;p>>=1)
        if(p+i<=n)
            if(x[i+p]<=k) i+=p;
    if(tip==0 && x[i]!=k) return -1;
    else return i;
}

inline int tipu2(int k)
{
    int i=n,p=poz;
    for(;p>0 && i>0;p>>=1)
        if(i-p>0)
            if(x[i-p]>=k) i-=p;
    return i;
}

int main()
{
    int i;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&x[i]);
    scanf("%d",&m);
    int nr;
    for(poz=1;poz<=n;poz<<=1);
    for(;m;m--)
    {
        scanf("%d%d",&tip,&nr);
        if(tip==0 || tip==1) printf("%d\n",tipu1(nr));
        if(tip==2) printf("%d\n",tipu2(nr));
    }
    fclose(stdout);
    fclose(stdout);
    return 0;
}