Cod sursa(job #2266038)

Utilizator HerddexJinga Tudor Herddex Data 22 octombrie 2018 09:29:01
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

void type1(unsigned long a[], int n, int x)
{
    int st = 0;
    int dr = n-1;
    int pos = -2;
    while(st<=dr)
    {
        int mid = (st+dr)/2;

        if(a[mid] == x)
            pos = mid;

        if(a[mid] <= x)
            st = mid+1;
        else
            dr = mid-1;
    }
    fout << pos+1 << '\n';
}

void type2(unsigned long a[], int n, int x)
{
    int st = 0;
    int dr = n-1;
    int pos = -2;
    while(st<=dr)
    {
        int mid = (st+dr)/2;

        if(a[mid] <= x)
        {
            pos = mid;
            st = mid+1;
        }
        else
            dr = mid-1;
    }
    fout << pos+1 << '\n';
}

void type3(unsigned long a[], int n, int x)
{
    int st = 0;
    int dr = n-1;
    int pos = -2;
    while(st<=dr)
    {
        int mid = (st+dr)/2;

        if(a[mid] >= x)
        {
            pos = mid;
            dr = mid-1;
        }
        else
            st = mid+1;
    }
    fout << pos+1 << '\n';
}

int main()
{
    int N;
    fin >> N;
    unsigned long *a = new unsigned long [N];

    for(int i=0; i<=N-1; i++)
        fin >> a[i];

    int M;
    fin >> M;
    for(int k=1; k<=M; k++)
    {
        int type;
        fin >> type;
        int x;
        fin >> x;

        if(type == 0)
            type1(a, N, x);
        else if (type == 1)
            type2(a, N, x);
        else
            type3(a, N, x);
    }



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