Cod sursa(job #3145658)

Utilizator G3K0Airinei Gabriel Vlad G3K0 Data 16 august 2023 16:12:31
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100005];
int n;
int k;
void  nulx (int x,int st,int dr,int &afis)
{
    if(st>dr)
        return;
    int mid =(st+dr+1)/2;




    if(v[mid]>x)
        nulx(x,st,mid-1,afis);
    else if(v[mid]<x)
        nulx(x,mid+1,dr,afis);
    else  if(v[mid]==x)
    {
        if(afis<mid)
            afis=mid;
        nulx(x,mid+1,dr,afis);

    }
}
void stx (int x,int st,int dr,int & afis)
{
    if(st>dr)
        return;

    int mid =(st+dr+1)/2;

    if(v[mid]>x)
        stx(x,st,mid-1,afis);
    else
    {
        if(afis<mid)
            afis=mid;
        stx(x,mid+1,dr,afis);

    }

}
void ndx (int x,int st,int dr,int &afis)
{
    if(st>dr)
        return;
    int mid =(st+dr+1)/2;
    if(v[mid]<x)
        ndx(x,mid+1,dr,afis);
    else
    {
        if(afis>mid)
            afis=mid;
        ndx(x,st,mid-1,afis);

    }
}
int main()
{ int afis;

    f>>n;
    for(int i=1; i<=n; i++)
        f>>v[i];
    int k;
    f>>k;
    for(int i=1;i<=k;i++)
    { int nr,x;
        f>>nr>>x;
        if(nr==0)
        {
            afis=-1;
            nulx(x,1,n,afis);
        }
         if(nr==1)
        {
            afis=-1;
            stx(x,1,n,afis);
        }
         if(nr==2)
        {
            afis=INT_MAX;
            ndx(x,1,n,afis);
        }
        g<<afis<<'\n';
    }

    return 0;
}