Cod sursa(job #1413362)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 1 aprilie 2015 20:31:34
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#define NMAX 100001

using namespace std;

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

int i, n, v[NMAX], nrquiz, tip, x;

int cautbin0(int st, int dr, int x)
{
    int med, last=-1;
    while (st<=dr)
    {
        med=(st+dr)/2;
        if (v[med]==x)
            last=med, st=dr+1;
        else
            if (x<v[med])
            dr=med-1;
        else
            st=med+1;
    }
    if (last==-1) return -1;
    else
        while (v[last]==x) last++;
    return last-1;
}

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

int cautbin2(int st, int dr, int x)
{
    int med;
    while (st<dr)
    {
        med=(st+dr)/2;
        if (x>v[med])
            st=med+1;
        else
            dr=med;
    }
    while (v[med]<x) med++;
    return med;
}

int main()
{
    f>>n;
    for (i=1; i<=n; ++i)
        f>>v[i];

    f>>nrquiz;

    while (nrquiz)
    {
        nrquiz--;
        f>>tip>>x;
        if (tip==0) g<<cautbin0(1,n,x)<<'\n';
        if (tip==1) g<<cautbin1(1,n,x)<<'\n';
        if (tip==2) g<<cautbin2(1,n,x)<<'\n';
    }

    return 0;
}