Cod sursa(job #975083)

Utilizator frumushelRadu Lucian Andrei frumushel Data 19 iulie 2013 00:16:55
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.94 kb
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;

const long LEN = 100001;

unsigned long a[LEN];

long long maxim;

void cautbin1(long y, int s, int d)
{
    if(s<d)
    {
        long mid = s + (d-s)/2;
        if(a[mid] == y && mid > maxim)
            maxim = mid;
        if(y < a[mid])
            cautbin1(y, s, mid);
        else
            cautbin1(y, mid+1, d);
    }

}
void cautbin2(long y, int s, int d)
{
    if(s<d)
    {
        long mid = s + (d-s)/2;
        if(a[mid] <= y && mid > maxim)
        {
            maxim = mid;
            cautbin2(y, mid+1, d);
        }
        else
        {
            maxim = mid;
            cautbin2(y, s, mid);
            cautbin2(y, mid+1, d);
        }

    }

}
void cautbin3(long y, int s, int d)
{
    if(s<d)
    {
        long mid = s + (d-s)/2;
        if(a[mid] >= y && mid < maxim)
            maxim = mid;
        cautbin3(y, s, mid);
        cautbin3(y, mid+1, d);
    }

}

int compare (const void * a, const void * b)
{
  return ( *(unsigned long*)a - *(unsigned long*)b );
}

int main()
{

    int i;
    long n,m,x,y;
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>n;
    a[0]=0;
    for(i=0;i<n;i++)
    {
        f>>a[i];
    }

    qsort(a, n, sizeof(unsigned long), compare );

    for(i=0;i<n;i++)
    {
        cout<<a[i];
    }

    f>>m;

    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        //cout<<x<<y<<endl;
        if(x==0)
        {
            maxim = -1;
            //cout<<maxim;
            cautbin1(y, 0, n-1);
            g<<maxim+1<<endl;
        }

        else if(x==1)
        {
            maxim = -1;
            cautbin2(y,0, n-1);
            g<<maxim+1<<endl;
        }

        else if(x==2)
        {
            maxim = 32000;
            cautbin3(y, 0, n-1);
            g<<maxim+1<<endl;
        }

    }
}