Cod sursa(job #1862770)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 30 ianuarie 2017 11:41:56
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
#define maxn 100005

int n,m,i,t,x;
int v[maxn];

int BS(int t,int x)
{
    if(t==0 || t==1)
    {
        int pas=1<<17,r=0;

        while(pas!=0)
        {
            if(pas+r<=n && v[pas+r]<=x)
                r+=pas;
            pas/=2;
        }

        if(t==0)
        {
            if(v[r]==x)
                return r;
            else return -1;
        }
        else
            return r;
    }
    else
    {
        int pas,r;
        pas=r=1<<17;

        while(pas!=0)
        {
            if(r-pas>0 && r-pas>=x)
                r-=pas;
            pas/=2;
        }
        return r-1;
    }
}

int main()
{
    FILE *f1,*f2;
    f1=fopen("cautbin.in","r");
    f2=fopen("cautbin.out","w");

    fscanf(f1,"%d",&n);
    for(i=1;i<=n;i++)
        fscanf(f1,"%d",&v[i]);

    fscanf(f1,"%d",&m);
    for(i=0;i<m;i++)
    {
        fscanf(f1,"%d%d",&t,&x);
        fprintf(f2,"%d ",BS(t,x));
    }


    return 0;
}