Submission #713818

#TimeUsernameProblemLanguageResultExecution timeMemory
713818PixelCatMechanical Doll (IOI18_doll)C++14
47 / 100
97 ms10564 KiB
#ifdef NYAOWO
#include "grader.cpp"
#endif
#include "doll.h"

#include <bits/stdc++.h>
#define For(i, a, b) for(int i = a; i <= b; i++)
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define sz(x) ((int)x.size())
#define eb emplace_back
using namespace std;
using LL = long long;
using pii = pair<int, int>;

const int MAXM = 100010;

vector<int> x, y;

int solve(vector<int> &v, int l, int r) {
    if(l == r) return v[l];
    int m = (l + r) / 2;
    int id = sz(x);
    x.eb(0); y.eb(0);
    int a = solve(v, m + 1, r);
    int b = solve(v, l, m);
    x[id] = a; y[id] = b;
    // cout << l << " " << r << " " << id << " " << x[id] << " " << y[id] << " " << (-(id + 1)) << "\n" << flush;
    return -(id + 1);
}

void rev(int n, vector<int> &v) {
    int j = 0;
    For(i, 0, n - 1) {
        if(i < j) swap(v[i], v[j]);
        for(int k = n >> 1; (j ^= k) < k; k >>= 1);
    }
}

void create_circuit(int M, std::vector<int> A) {
    // if(M == 1) {
    //     solve2(sz(A));
    //     return;
    // }

    A.eb(0);
    vector<int> ans(M + 1, -1);
    reverse(all(A));
    ans[0] = A.back();
    A.pop_back();

    
    int lgn = __lg(sz(A) - 1) + 1;
    int n = (1 << lgn);
    vector<int> b(n);
    For(i, 0, n - 1) b[i] = i;
    rev(n, b);
    b.erase(b.begin() + sz(A), b.end());
    sort(all(b));
    vector<int> c(n, -1);
    For(i, 0, sz(A) - 1) {
        c[b[i]] = A[i];
    }
    rev(n, c);

    solve(c, 0, n - 1);
    answer(ans, x, y);
}


/*

4 16
1 2 1 3 1 3 1 1 2 1 3 1 3 1 4 4

1 13
1 1 1 1 1 1 1 1 1 1 1 1 1

*/
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...