Cod sursa(job #1971119)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 19 aprilie 2017 20:35:08
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<cstdio>
#include <iostream>
using namespace std;

int n,m,pa;
int v[100005];

int tip1(int val,int tip)
{
    int p=pa,poz;
    for(poz=0;p>0;p>>=1)
    {
        if(poz+p<=n)
            if(v[poz+p]<=val) poz+=p;
    }
    if(tip==0)
    {
        if(v[poz]!=val) return -1;
        if(poz==0) return -1;
    }
    return poz;
}

int tip2(int val)
{
    int poz=n,p=pa;
    for(;p>0;p>>=1)
        if(poz-p>0)
            if( v[poz-p]>=val) poz-=p;
    return poz;
}

int main()
{
    int i,t,a;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++) scanf("%d",&v[i]);
    for(pa=1;pa<=n;pa<<=1);
    scanf("%d",&m);
    for(;m;m--)
    {
        scanf("%d%d",&t,&a);
        if(t==1 || t==0) printf("%d\n",tip1(a,t));
        if(t==2) printf("%d\n",tip2(a));
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}