Cod sursa(job #1120002)

Utilizator UgleaEduFMI - Edward UgleaEdu Data 24 februarie 2014 21:07:55
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

        int mid = ( st + dr ) / 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 <int> v;
    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 - 1] >= caut )

                poz --;

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

        }



    }

    return 0;
}