Cod sursa(job #1751838)

Utilizator catalin9898Bajenaru Catalin catalin9898 Data 2 septembrie 2016 01:16:25
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <cstdio>
using namespace std;
int v[100001],log=1,n;

int caut(int val)
{
int a=log,i=0;
    for(a;a;a/=2)
    {
        if(i+a<=n&&val>=v[i+a])i+=a;
    }
    return i;
}

int despart(int st,int dr,int val)
{   if(st==dr||st>=dr)return st;
else if(dr>=n)return dr;
    int m=st+(dr-st)/2;
    if(v[m]>=val)despart(st,m,val);
    else if(v[m]<val)despart(m+1,dr,val);
}
int caut2(int val)
{
   int a=log,i=0,b;
    for(a;a;a/=2)
    {
        if(i+a<n&&val>v[i+a])i+=a;

    }
    return i;
}

int main()
{freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int i,j,m,p;
scanf("%d",&n);
for(log=1;log<=n;log*=2);
for(i=1;i<=n;i++)scanf("%d",v+i);
scanf("%d",&m);
for(i=0;i<m;i++)
{
    scanf("%d%d",&p,&j);
    if(p==0)
    {p=caut(j);
    if(v[p]==j)
printf("%d\n",p);else printf("-1\n");
    }
    else if(p==1)
    {
        printf("%d\n",caut(j));
    }
    else
    {
    printf("%d\n",caut2(j)+1);
    }

}

    return 0;
}