Cod sursa(job #1766355)

Utilizator dranoellenTurica Leonard-Petru dranoellen Data 27 septembrie 2016 21:11:37
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <cstdio>
#include <iostream>
using namespace std;
FILE *re=fopen("cautbin.in","r"),*wr=fopen("cautbin.out","w");



int n, vect[10000],m;


int bin1(int i,int j, int x)
{
    int mijl=(i+j)/2;
    cout<<i<<' '<<mijl<<' '<<j<<'\n';
    if(i==j)return i;

    if (vect[mijl]<=x)return bin1(mijl+1,j,x);
    if (vect[mijl]>x)return bin1(i,mijl,x);
}
int bin2(int i,int j, int x)
{
    int mijl=(i+j)/2;
    cout<<i<<' '<<mijl<<' '<<j<<'\n';
    if(i==j)return i;

    if (vect[mijl]<x)return bin2(mijl+1,j,x);
    if (vect[mijl]>=x)return bin2(i,mijl,x);
}



int main()
{
    fscanf(re,"%d",&n);
    int i=0,cmmandid,subject;
    for(;i<n;++i)fscanf(re,"%d",&vect[i]);
    fscanf(re,"%d",&m);
    for(i=0;i<m;++i)
    {
        fscanf(re,"%d%d",&cmmandid,&subject);
        if(cmmandid==0)
        {
            int x=bin1(0,n-1,subject);

            if(vect[--x]==subject)
            fprintf(wr,"%d\n",x+1);
            else
            fprintf(wr,"%d\n",-1);
        }
        if(cmmandid==1)
        {
            int x=bin1(0,n-1,subject);
            fprintf(wr,"%d\n",x);

        }
        if(cmmandid==2)
        {
            int x=bin2(0,n-1,subject);
            fprintf(wr,"%d\n",x+1);
        }
    }
    return 0;
}