Cod sursa(job #1934254)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 21 martie 2017 12:10:20
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("nextseq.in");
ofstream fout("nextseq.out");

const int NMax = 1e4 + 5;

int A[NMax], B[NMax], X[NMax];

inline int Binary(const int &value, int hi) {
    int lo = 1;

    while(lo <= hi) {
        int mid = (lo + hi) >> 1;

        if(X[mid] == value) return mid;
        if(X[mid] < value) {
            lo = mid + 1;
        } else {
            hi = mid - 1;
        }
    }

    return 1;
}

inline void Increment(const int &lim) {
    int t = 1;
    for(int i = A[0]; i > 0 && t != 0; i--) {
        A[i] += t;

        if(A[i] > lim) {
            A[i] = 1;
        } else {
            t = 0;
        }
    }

    if(t != 0) {
        A[++A[0]] = 1;
    }
}

inline bool Smaller() {
    if(A[0] < B[0]) return true;
    if(A[0] > B[0]) return false;

    for(int i = 1; i <= A[0]; i++) {
        if(A[i] > B[i]) return false;
        if(A[i] < B[i]) return true;
    }

    return false;
}

int main() {
    ios::sync_with_stdio(false);

    int n, m, p;
    fin >> n >> m >> p;

    for(int i = 1; i <= n; i++) fin >> X[i];
    for(int i = 1; i <= m; i++) fin >> A[i];
    for(int i = 1; i <= p; i++) fin >> B[i];

    sort(X + 1, X + n + 1);
    for(int i = 1; i <= m; i++) A[i] = Binary(A[i], n);
    for(int i = 1; i <= p; i++) B[i] = Binary(B[i], n);

    A[0] = m; B[0] = p;

    Increment(n);
    int ans = 0;
    while(Smaller()) {
        ans++;
        Increment(n);
    }

    fout << ans;
    return 0;
}