Cod sursa(job #916399)

Utilizator R4DIC4LTeodorescu Oana Maria R4DIC4L Data 16 martie 2013 14:20:21
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.79 kb
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int t;
long a[100001], n, m, i, k;
long binarySearch0(long a[], long p, long q, long k)
{
    long m = (p + q)/2;
    if(a[m] < k)
                {
                    return binarySearch0(a, p, m - 1, k);
                }
                else
                    if(a[m] > k)
                    {
                        return binarySearch0(a, m + 1, q, k);
                    }
                    else
                    {
                        if(a[m + 1] == k)
                            return binarySearch0(a, m + 1, q, k);
                        else
                            return m;
                    }
}
long binarySearch1(long a[], long p, long q, long k)
{
    long m = (p + q)/2;
    if(a[m] <= k)
                {
                    if(a[m + 1] > k)
                        return m;
                    else
                        return binarySearch1(a, m + 1, q, k);
                }
                else
                    if(a[m] > k)
                    {
                        if(a[m - 1] < k)
                            return m - 1;
                        else
                            return binarySearch1(a, p, m - 1, k);
                    }

}
long binarySearch2(long a[], long p, long q, long k)
{
    long m = (p + q)/2;
    if(a[m] < k)
                {
                    if(a[m + 1] > k)
                        return m + 1;
                    else
                        return binarySearch2(a, m + 1, q, k);
                }
                else
                    if(a[m] > k)
                    {
                        if(a[m - 1] < k)
                            return m;
                        else
                            return binarySearch2(a, p, m - 1, k);
                    }
                    else
                    {
                        if(a[m - 1] == k)
                            return binarySearch2(a, p, m - 1, k);
                        return m;
                    }
}
int main()
{
    f >> n;
    for(i = 1; i <= n; i++)
        f >> a[i];
    f >> m;
    for(i = 1; i <= m; i++)
    {
        f >> t >> k;
        switch(t)
        {
            case 0:
                    {
                        g << binarySearch0(a, 1, n, k) << "\n";
                        break;
                    }

            case 1:
                    {
                        g << binarySearch1(a, 1, n, k) << "\n";
                        break;
                    }

            case 2:
                    {
                        g << binarySearch2(a, 1, n, k) << "\n";
                        break;
                    }
        }
    }
    return 0;
}