Cod sursa(job #2486563)

Utilizator maria_isailaMaria Isaila maria_isaila Data 3 noiembrie 2019 10:01:58
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.77 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream l("cautbin.in");
ofstream g("cautbin.out");
int bin(int v[1001], int x, int s, int f, int p)
{
    if (s <= f) {
        if(x==v[(s+f)/2])
        {
            p=(s+f)/2;
        }
        if(x<v[(s+f)/2])
        {
            return bin(v, x, s, (s+f)/2-1, p);
        }
        else
        {
            return bin(v, x, (s+f)/2+1, f, p);
        }
    }
    return p;
}
int bin1(int v[1001], int x, int s, int f, int p)
{
    if (s <= f) {
        if(x==v[(s+f)/2])
        {
            p=(s+f)/2;
        }
        if(x<v[(s+f)/2])
        {
            return bin1(v, x, s, (s+f)/2-1, p);
        }
        else
        {
            return bin1(v, x, (s+f)/2+1, f, p);
        }
    }
    if(p!=-1)
    {
        return p;
    }
    else
    {
        return f;
    }
}
int bin2(int v[1001], int x, int s, int f, int p)
{
    if (s <= f) {
        if(x==v[(s+f)/2])
        {
            p=(s+f)/2;
        }
        if(x>v[(s+f)/2])
        {
            return bin2(v, x, (s+f)/2+1, f, p);
        }
        else
        {
            return bin2(v, x, s, (s+f)/2-1, p);
        }
    }
    if(p!=-1)
    {
        return p;
    }
    else
    {
        return s;
    }
}
int main()
{

    int n, v[1001], s=1, f, x, m, o, p;
    l>>n;
    f=n;
    for(int i=1; i<=n; i++)
    {
        l>>v[i];
    }
    l>>m;
    while(m)
    {
        l>>o>>x;
        if(o==0)
        {
            g<<bin(v, x, s, f, -1)<<'\n';
        }
        else if(o==1)
        {
            g<<bin1(v, x, s, f, -1)<<'\n';
        }
        else
        {
            g<<bin2(v, x, s, f, -1)<<'\n';
        }
        m--;
    }
    return 0;
}