Cod sursa(job #2065687)

Utilizator nic_irinaChitu Irina nic_irina Data 14 noiembrie 2017 00:28:07
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");

int v[100001];

int caut_bin (int st, int dr, int x)
{
    int m = ( st + dr ) / 2;
    if( st >= dr )
    {
        if( v[m] <= x )
            return dr;
        else
            return st-1;
    }
    if( x < v[m] )
        return caut_bin( st, m-1, x );
    else
    //if( x >= v[m] )
        return caut_bin( m+1, dr, x );
}

int main()
{
    int n, i;
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>v[i];
    int m, q, x;
    fin>>m;
    for(i=1; i<=m; i++)
    {
        fin>>q>>x;
        int ans;
        if(q == 0)
        {
            ans = caut_bin(1, n, x);
            if( v[ans] == x )
                fout << ans << '\n';
            else
                fout<< -1 << '\n';
        }
        else
            if(q == 1)
            {
                ans = caut_bin(1, n, x);
                fout << ans << '\n';
            }
            else
                {
                    ans = caut_bin(1, n, x-1);
                    fout << ans+1 << '\n';
                }

    }
    fin.close();
    fout.close();
    return 0;
}