Cod sursa(job #3160990)

Utilizator Andor.Mak Andor Andor. Data 25 octombrie 2023 13:24:53
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <fstream>
using namespace std;

int cautbin0(int t[], int a, int b, int k)
{
    int c=(a+b)/2;
    if (a==b&&t[a]!=k) return -1;
    if (k==t[c-1])
    {
        while (k==t[c-1]) c++;
        return c;
    }
    else
    {
        if (k>t[c-1]) cautbin0(t, c+1, b, k);
        else cautbin0(t, a, c, k);
    }
}
int cautbin1(int t[], int a, int b, int k)
{
    int c=(a+b)/2;
    if (a==b&&t[a]!=k) return -1;
    if (k>=t[c-1])
    {
        while (k>=t[c-1]) c++;
        return c;
    }
    else
    {
        if (k>t[c-1]) cautbin1(t, c+1, b, k);
        else cautbin1(t, a, c, k);
    }
}
int cautbin2(int t[], int a, int b, int k)
{
    int c=(a+b)/2;
    if (a==b&&t[a]!=k) return -1;
    if (k>=t[c-1])
    {
        while (k<=t[c-1]) c--;
        return c+2;
    }
    else
    {
        if (k>t[c-1]) cautbin2(t, c+1, b, k);
        else cautbin2(t, a, c, k);
    }
}
int main()
{
    int n, m, k, szam;
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    int t[100000];
    f>>n;
    for (int i=0; i<n; i++)
    {
        f >> t[i-1];
    }
    f>>m;
    for (int i=1; i<=m; i++)
    {
        f>>szam>>k;
        if (szam==0) g << cautbin0(t, 1, n, k)<< " ";
        if (szam==1) g << cautbin1(t, 1, n, k)<< " ";
        if (szam==2) g << cautbin2(t, 1, n, k)<< " ";
    }
    f.close();
    g.close();
    return 0;
}