Cod sursa(job #1120088)

Utilizator UgleaEduFMI - Edward UgleaEdu Data 24 februarie 2014 21:27:46
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

long int cbin ( long int st, long int dr, vector<long int> v, long int c )
{
    if ( st <= dr )
    {

        long int mid = st + ( dr - st ) / 2;

        if ( v [ mid ] ==  c )

            return mid;

        if ( v [ mid ] < c )

            return cbin( mid + 1, dr, v, c);

        else

            return cbin( st, mid - 1, v, c);

    }
    else

        return ( st + dr ) / 2;

}

int main()
{
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");

    vector <long int> v;
    long int n, m, j, caut, poz;

    f >> n;

    for ( int i = 0 ; i < n; i++ )
    {

        f >> j;
        v.push_back( j );
    }

    f >> m;

    for ( int i = 0; i < m; i++ )
    {

        f >> j;
        f >> caut;

        poz = cbin( 0, v.size() - 1, v, caut );


        if ( j == 0 )
        {

            if ( v[ poz ] == caut )
            {

               while ( v [ poz + 1 ] == caut )

                    poz ++;

                g << poz + 1<< '\n';

            }
            else

                g << -1 << '\n';
        }

        if ( j == 1 )
        {

            while ( v [ poz + 1 ] <= caut )

                poz ++;

            g << poz + 1<< '\n';
        }

        if ( j == 2 )
        {

            while ( v [ poz ] < caut )

                poz ++;

            g << poz + 1<< '\n';

        }



    }

    return 0;
}