Cod sursa(job #1128953)

Utilizator dianaa21Diana Pislaru dianaa21 Data 27 februarie 2014 19:23:44
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <fstream>
using namespace std;
ifstream is ("cautbin.in");
ofstream os ("cautbin.out");

int n, v[100003], x, y, q, u, k;
int C (int i, int n);
int C2 (int i, int n);
int C3 (int i, int n);

int main()
{
    is >> n;
    for(int i = 1; i <= n; ++i)
        is >> v[i];
    is >> k;
    for(int i = 1; i <= k; ++i)
    {
        is >> x >> y;
        if(x == 0)
        {
            u = C(1, n);
            while(v[u] == y)
                ++u;
            os << u-1 <<'\n';
        }
        if(x == 1)
        {
            u = C2(1, n);
            while(v[u] <= y)
                ++u;
            os << u-1 <<'\n';
        }
        if(x == 2)
        {
            u = C3(1, n);
            while(v[u] >= y)
                --u;
            os << u+1 <<'\n';
        }
    }

    is.close();
    os.close();
    return 0;
}
int C (int i, int n)
{
    if (i > n)
        return -1;
    q = (i + n)/2;
    if(y == v[q])
        return q;
    if(y > v[q])
        return C(q+1, n);
    return C(i, q-1);
}
int C2 (int i, int n)
{
    if (i > n)
        return -1;
    q = (i + n)/2;
    if(y >= v[q])
        return q;
    if(y >= v[q])
        return C(q+1, n);
    return C(i, q-1);
}
int C3 (int i, int n)
{
    if (i > n)
        return -1;
    q = (i + n)/2;
    if(y <= v[q])
        return q;
    if(y <= v[q])
        return C(q+1, n);
    return C(i, q-1);
}