Cod sursa(job #1431893)

Utilizator SwagginInMyJaysaaaaaaaaaaaas SwagginInMyJays Data 9 mai 2015 11:29:41
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.68 kb
#include <cstdio>
#include <fstream>
#include <cstdlib>
#include <utility>
#include <algorithm>
#include <bitset>
#include <vector>
#include <map>
#include <queue>
#include <string>
#include <set>
#include <cstring>

#define LL long long
#define F(i, a, b) for (int i = (a) ; i <= (b) ; ++i)
#define V_IN(x) (V).push_back((x))
#define LLU unsigned LL
#define ALL(V) (V).begin(), (V).end()
#define V_sz (V).size()
#define mlb map <LL, bool>
#define MLI map <LL, int>

#define mp make_pair
#define pii pair <int, int>
#define SORT(x) sort ((x).begin(), (x).end() )

#define fi first
#define se second
#define VI vector <int>

using namespace std;

VI V;

int lg, i, logg;

inline int b_s01 (int x, int N) {
    for (i = 0, logg = lg;  logg ; logg >>= 1)
    if (logg + i < N && V[logg + i] <= x)
    i += logg;
    return i;
}

inline int b_s02 (int x, int N){
    for (i = N - 1 , logg = lg; logg; logg >>= 1 )
        if (i - logg >= 0  && V[i - logg] >= x )
        i -= logg;
    return i;
}





int main(){
    ifstream f ("cautbin.in");
    ofstream out ("cautbin.out");
    int n, q, tip, r;
    f >> n;
    V.resize(n);
    for (auto &i : V) f >> i;
    f >> q;
    for (lg = 1; lg < n; lg <<= 1 );

    for (; q; --q ) {
            f >> tip >> r;
            if (tip == 1) {
                    out << b_s01(r, n) + 1 << "\n";
                    continue;
            }
            if (tip == 0) {
                    if (V[b_s01(r,n)] == r) out << b_s01(r,n) + 1 << "\n";
                    else out << -1 << "\n";
                    continue;
            }
            out << b_s02(r, n) + 1 << "\n";
    }
    return 0;


}