Cod sursa(job #1497700)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 7 octombrie 2015 10:15:52
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include<stdio.h>

FILE *fin,*fout;
int a[100001];
int n,m;
int x,y,var;

void solve0(int s,int e)
{
    int me=(s+e)/2;
    if(s>e)
    {
        return;
    }
    if(a[me]<y)
    {
        solve0(me+1,e);
    }
    else if(a[me]>y)
    {
        solve0(s,me-1);
    }
    else
    {
        var=me;
        solve0(me+1,e);
    }
}

void solve1(int s,int e)
{
    int me=(s+e)/2;
    if(s>e)
    {
        return;
    }
    if(a[me]<=y)
    {
        var=me;
        solve1(me+1,e);
    }
    else
    {
        solve1(s,me-1);
    }
}

void solve2(int s,int e)
{
    int me=(s+e)/2;
    if(s>e)
    {
        return;
    }
    if(a[me]<y)
    {
        solve2(me+1,e);
    }
    else
    {
        var=me;
        solve2(s,me-1);
    }
}

int main()
{
    fin=fopen("cautbin.in","r");
    fout=fopen("cautbin.out","w");

    fscanf(fin,"%d",&n);
    for(int i=1;i<=n;i++)
    {
        fscanf(fin,"%d",&a[i]);
    }

    fscanf(fin,"%d",&m);
    for(int i=1;i<=m;i++)
    {
        fscanf(fin,"%d %d",&x,&y);
        if(x==0)
        {
            var=-1;
            solve0(1,n);
            fprintf(fout,"%d\n",var);
        }
        else if(x==1)
        {
            solve1(1,n);
            fprintf(fout,"%d\n",var);
        }
        else
        {
            solve2(1,n);
            fprintf(fout,"%d\n",var);
        }
    }
}