Cod sursa(job #1836750)

Utilizator GeoeyMexicanuBadita George GeoeyMexicanu Data 28 decembrie 2016 17:12:54
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.72 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int i,j,n,poz=-1,k;
void bin1(int s,int d,int* x,int &poz,int val)
{
    if(s<=d)
    {
        if(s==d)
        {
            if(x[s]==val)
                if(s>poz)
                poz=s;
        }
        else
        {
            bin1(s,(s+d)/2,x,poz,val);
            bin1((s+d)/2+1,d,x,poz,val);
        }
    }
}
void bin2(int s,int d,int* x,int &poz,int val)
{
    if(s<=d)
    {
        if(s==d)
        {
            if(x[s]<=val)
            {
                if(s>poz)
                    poz=s;
            }
        }
        else
        {
            bin2(s,(s+d)/2,x,poz,val);
            bin2((s+d)/2+1,d,x,poz,val);
        }
    }
}
void bin3(int s,int d,int* x,int &poz,int val)
{
    if(s<=d)
    {
        if(s==d)
        {
            if(x[s]>=val)
            {
                if(poz>s)
                    poz=s;
            }
        }
        else
        {
            bin3(s,(s+d)/2,x,poz,val);
            bin3((s+d)/2+1,d,x,poz,val);
        }
    }
}
int main()
{
    int tip1,val1;
    f>>n;
    int* v=new int[n+5];
    for(i=1;i<=n;i++)
        f>>v[i];
    f>>k;
    for(i=1;i<=k;i++)
    {
        f>>tip1>>val1;
        if(tip1==0)
        {
            poz=-1;
            bin1(1,n,v,poz,val1);
        }
        else
            if(tip1==1)
            {
                poz=-1;
                bin2(1,n,v,poz,val1);
            }
            else
                if(tip1==2)
                {
                    poz=n;
                    bin3(1,n,v,poz,val1);
                }
        g<<poz<<"\n";
    }
}