Submission #94332

#TimeUsernameProblemLanguageResultExecution timeMemory
94332fedoseevtimofeyXylophone (JOI18_xylophone)C++14
47 / 100
189 ms404 KiB
#include "xylophone.h"
#include "bits/stdc++.h"

using namespace std;

int my_query(int l, int r, vector <int> &a) {
    int mx = -1e9, mn = 1e9;
    for (int i = l; i <= r; ++i) {
        mx = max(mx, a[i]);
        mn = min(mn, a[i]);
    }
    return mx - mn;
}

void solve(int n) {
    int r = n;
    while (query(1, r) == n - 1) --r;
    ++r;
    vector <int> a(n + 1, -1);
    a[r] = n;
    if (r != n) {
        a[r + 1] = n - query(r, r + 1);
    }
    if (r != 1) {
        a[r - 1] = n - query(r - 1, r);
    }
    for (int i = r - 2; i >= 1; --i) {
        int x = query(i, i + 1);
        int y = query(i, i + 2);
        set <int> avl;
        for (int z = n; z >= 1; --z) {
            a[i] = z;
            if (my_query(i, i + 1, a) == x && my_query(i, i + 2, a) == y) {
                avl.insert(z);
            }
        }
        assert(avl.size() == 1);
        a[i] = *(avl.begin());
        assert(a[i] != -1);
    }
    for (int i = r + 2; i <= n; ++i) {
        int x = query(i - 1, i);
        int y = query(i - 2, i);
        set <int> avl;
        for (int z = n; z >= 1; --z) {
            a[i] = z;
            if (my_query(i - 1, i, a) == x && my_query(i - 2, i, a) == y) {
                avl.insert(z);
            }
        }
        assert(avl.size() == 1);
        a[i] = *(avl.begin());
        assert(a[i] != -1);
    }
    for (int i = 1; i <= n; ++i) {
        answer(i, a[i]);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...