Cod sursa(job #1836693)

Utilizator GeoeyMexicanuBadita George GeoeyMexicanu Data 28 decembrie 2016 16:14:11
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");
int max1=-1,min1;
int i,j,x,y,t,r,n,k;
int* v;
void caut1(int s,int d,int x)
{
    if(s<=d)
    {
    if(s==d)
    {
        if(max1<s && v[s]==x)
            max1=s;
    }
        caut1(s,(s+d)/2,x);
        caut1(((s+d)/2)+1,d,x);
    }
}
void caut2(int s,int d,int x)
{
    if(s<=d)
    {
    if(s==d)
    {
        if(s>max1 && v[s]<=x)
            max1=s;
    }
        caut2(s,(s+d)/2,x);
        caut2(((s+d)/2)+1,d,x);
    }
}
void caut3(int s,int d,int x)
{
    if(s<=d)
    {
    if(s==d)
    {
        if(s<min1 && v[s]>=x)
        min1=s;
    }
        caut3(s,(s+d)/2,x);
        caut3(((s+d)/2)+1,d,x);
    }
}
int main()
{
    f>>n;
    v=new int[n+4];
    for(i=1;i<=n;i++)
        f>>v[i];
    f>>k;
    while(k!=0)
    {
        f>>y>>x;
        max1=-1;
        min1=n;
        if(y==0)
        {
            caut1(1,n,x);
            g<<max1<<endl;
        }
        else
            if(y==1)
            {
                caut2(1,n,x);
                g<<max1<<endl;
            }
            else
                if(y==2)
                {
                    caut3(1,n,x);
                    g<<min1<<endl;
                }
        k--;
    }
}