Nu aveti permisiuni pentru a descarca fisierul grader_test16.ok

Cod sursa(job #795634)

Utilizator luckyme91wiz kid luckyme91 Data 9 octombrie 2012 02:33:58
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
#include <fstream>

using namespace std;
int x[100001];
int begin, end, n, mid;
bool ok;
//ofstream out ("cautbin.out", ofstream::out);


int solve2 (int y, int s) {

    begin = 0;
    end = n;
    while (begin < end) {
        mid = begin + (end - begin)/2;
        if (x[mid] < s) {
            begin = mid + 1;
        }
        else {
            begin = mid + 1;
        }
    }

    if (x[end] < s)
        end++;
    if (end == -1)
        end++;

    return end + 1;
}

int solve1 (int y, int s) {

    begin = 0;
    end = n;
    return 2;
    while (begin < end) {
        mid = begin + (end - begin)/2;
        if (x[mid] <= s) {
            begin = mid + 1;
        }
        else {
            end = mid;
        }
    }

    if (x[end] > s)
        end--;
    if (end == n)
        end--;
    return end + 1;
}

int solve0 (int y, int s) {

    begin = 0;
    end = n;
    return 2;
    while (begin < end) {
        mid = begin + (end - begin)/2;
        if (x[mid] <= s) {
            begin = mid + 1;
        }
        else {
            end = mid;
        }
    }

    if (x[end] != s && x[end-1] != s)
        return -1;
    if (x[end - 1] == s)
        end--;

       return end + 1;
}

int main () {
    int q, y, s;
//    ifstream in ("cautbin.in", ifstream::in);
    freopen ("cautbin.in", "r", stdin);
    freopen ("cautbin.out", "w", stdout);


//    in >> n;
    scanf("%d", &n);

    for (int i = 0; i < n; i++)
    {
//      in >> x[i];
        scanf("%d", &x[i]);
    }
    scanf("%d", &q);
//    in >> q;
    while (q--)
    {
        //in >> y >> s;
        scanf ("%d %d", &y, &s);
        if (y == 0)
           printf ("%d\n", solve0 (y, s));
//        else if (y == 1)
//           out << solve1 (y, s) << endl;
//        else 
  //         out << solve2 (y, s) << endl;
    }
}