Cod sursa(job #1492348)

Utilizator DobosDobos Paul Dobos Data 27 septembrie 2015 16:44:58
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100005],n;



int binar(int val)
{
    int i, step;
    for (step = 1; step < n; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step < n && v[i + step] <= val)
            i += step;
    return i;
}
int main()
{
    int i,x,p,k,m;
    f>>n;
    for(i = 0; i < n ; i++)
        f>>v[i];
    f>>m;
    for(i = 1; i<= m; i++)
    {
        f>>k>>x;
        p = binar(x);
        if(k == 0){
            if (v[p] != x)
                g<<-1<<"\n";
            else{
                while(v[p] == x)
                    p++;
                g<< p <<"\n";
                }
                }
        if(k == 1){
                if(v[p] <= x) {
            while(v[p] <= x)
                    p++;
                     g << p <<"\n";
                    }
                    else{
                        while(v[p] > x)
                            p--;
                        g << p + 2 << "\n";
                    }
        }
        if(k == 2)
        {
            if(v[p] == x){
                while(v[p] == x)
                    p--;
                g << p + 2 << "\n";
                }
                else{
                    while(v[p] < x)
                        p++;
                    g << p << "\n";
                }
        }

    }



    return 0;
}