Cod sursa(job #1647542)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 10 martie 2016 21:04:25
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];

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

int tipu2(int nr)
{
    int i,k;
    for(i=n,k=poz; k>0 && i>0; k>>=1)
        if(i-k>0)
            if(x[i-k]>=nr) i-=k;
    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;
}