Cod sursa(job #2513289)

Utilizator TudosieRazvanTudosie Marius-Razvan TudosieRazvan Data 22 decembrie 2019 20:00:36
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.74 kb
#include <stdio.h>
#define NMAX 100000
using namespace std;

int n;
int v[NMAX+3];
FILE *fin,*fout;

int caut_bin_t0(int nr)
{
    int st=1;
    int dr=n;
    int ok=-1;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(v[mij]<=nr)
        {
            if(v[mij]==nr)
            {
                ok=mij;
            }
            st=mij+1;
        }
        else
        {
            dr=mij-1;
        }
    }
    return ok;
}

int caut_bin_1(int nr)
{
    int st=1,dr=n,sol=0;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(v[mij]<=nr)
        {
            sol=mij;
            st=mij+1;
        }
        else
        {
            dr=mij-1;
        }
    }
    return sol;
}

int caut_b_2(int nr)
{
    int st=1,dr=n,sol=0;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(v[mij]>=nr)
        {
            //caut in stanga
            sol=mij;
            dr=mij-1;
        }
        else
        {
            st=mij+1;
        }
    }
    return sol;
}

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",&v[i]);
    }
    int m;
    fscanf(fin,"%d",&m);
    for(int i=1; i<=m; i++)
    {
        int tip,numar,solutie=0;
        fscanf(fin,"%d %d",&tip,&numar);
        if(tip==0)
        {
            //vad daca il regasesc in sir
            solutie=caut_bin_t0(numar);
        }
        else if(tip==1)
        {
            solutie=caut_bin_1(numar);
        }
        else if(tip==2)
        {
            solutie=caut_b_2(numar);
        }
        fprintf(fout,"%d\n",solutie);
    }
    return 0;
}