Cod sursa(job #1639464)

Utilizator delta_wolfAndrei Stoica delta_wolf Data 8 martie 2016 12:32:52
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <cstdio>
using namespace std;
int n,i,m,t,k,a[100010];
int bsearch(int k)
{
    int i,step;
    for(step=1;step<n;step<<=1);
    for(i=0;step;step>>=1)
    if(i+step<=n&&a[i+step]<=k)
    i+=step;
    return i;
}
int bsearch1(int k)
{
    int i,step;
    for(step=1;step<n;step<<=1);
    for(i=0;step;step>>=1)
    if(i+step<=n&&a[i+step]<k)
    i+=step;
    return i;
}
int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    scanf("%d",&a[i]);
    scanf("%d",&m);
    while(m>0)
    {
        m--;
        m=m;
        scanf("%d%d",&t,&k);
        if(t==0)
        {
            i=bsearch(k);
            if(a[i]==k)
            printf("%d\n",i);
            else printf("%d\n",-1);
        }
        else if(t==1)
        {
            i=bsearch(k);
            printf("%d\n",i);
        }
        else
        {
            i=bsearch1(k);
            if(a[i+1]==k)
            {
                printf("%d\n",i+1);
            }
            else
            {
                i=bsearch(k);
                printf("%d\n",i+1);
            }
        }
    }
    return 0;
}