Submission #200988

#TimeUsernameProblemLanguageResultExecution timeMemory
200988arborUnscrambling a Messy Bug (IOI16_messy)C++14
100 / 100
7 ms632 KiB
#include "messy.h"
#include <iostream>
#include <algorithm>
#include <functional>
#include <climits>
#include <string>
#include <cstring>
#include <cmath>
#include <cassert>

#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>

using namespace std;
// using namespace __gnu_pbds;
using ll = long long;
using ull = unsigned long long;
using pii = pair<int, int>;
// using mii = gp_hash_table<int, int>;
// typedef tree<pii, null_type, less<>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;

#define ff first
#define ss second
#define pb push_back
#define eb emplace_back
#define sz(x) (int) (x).size()
#define all(x) x.begin(), x.end()

const int INF = 0x3f3f3f3f;
const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
const int MOD = 1e9 + 7;
const int MN = 1e5 + 2, LN = 17;

int N;
vector<int> f;

void init(int l, int r) {
    if (l == r) return;
    int m = (l + r) / 2;
    string s(N, '1');
    for (int i = l; i <= r; i++) s[i] = '0';
    for (int i = l; i <= m; i++) {
        s[i] = '1';
        add_element(s);
        s[i] = '0';
    }
    init(l, m);
    init(m + 1, r);
}

void go(int l, int r, vector<int> v) {
    if (l == r) {
        f[v[0]] = l;
        return;
    }
    int m = (l + r) / 2;
    string s(N, '1');
    vector<int> left, right;
    for (int i : v) s[i] = '0';
    for (int i : v) {
        s[i] = '1';
        if (check_element(s)) left.pb(i);
        else right.pb(i);
        s[i] = '0';
    }
    go(l, m, left);
    go(m + 1, r, right);
}

vector<int> restore_permutation(int n, int w, int r) {
    N = n;
    init(0, N - 1);
    compile_set();
    vector<int> v(N);
    for (int i = 0; i < N; i++) v[i] = i;
    f.resize(N);
    go(0, N - 1, v);
    return f;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...