Submission #1269139

#TimeUsernameProblemLanguageResultExecution timeMemory
1269139proofyHyper-minimum (IZhO11_hyper)C++20
100 / 100
347 ms98440 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long int n, m; const int N = 2e6 + 9; int b[N], dq[N]; int* c[N]; void transform() { // 1D monostack int l = 0, r = -1; for (int i = 0; i < n; i++) { while (l <= r && dq[l] <= i - m) l += 1; while (l <= r && *c[dq[r]] > *c[i]) r -= 1; dq[++r] = i; if (i - m + 1 >= 0) b[i - m + 1] = *c[dq[l]]; } for (int i = 0; i + m - 1 < n; i++) *c[i] = b[i]; } struct node { int value; vector<node*> v; }; void input(node* a, int dimension) { if (dimension == 0) return void(cin >> a->value); a->v = vector<node*>(n); for (int i = 0; i < n; i++) input(a->v[i] = new node(), dimension - 1); } void output(node* a, int dimension) { if (dimension == 0) return void(cout << a->value << " "); for (int i = 0; i + m - 1 < n; i++) output(a->v[i], dimension - 1); } void shift(node* a, int dimension) { if (dimension == 1) return; for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) swap(a->v[i]->v[j], a->v[j]->v[i]); for (int j = 0; j < n; j++) shift(a->v[j], dimension - 1); } node* solve_1D_only(node* a, int dimension) { if (dimension == 1) { for (int i = 0; i < n; i++) c[i] = &a->v[i]->value; transform(); return a; } for (int i = 0; i < n; i++) a->v[i] = solve_1D_only(a->v[i], dimension - 1); return a; } node* solve(node* a, int dimension) { if (dimension == 1) return solve_1D_only(a, 1); for (int i = 0; i < dimension; i++) { a = solve_1D_only(a, dimension); shift(a, dimension); } return a; } const int D = 4; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; node* a = new node(); input(a, D); a = solve(a, D); output(a, D); }
#Verdict Execution timeMemoryGrader output
Fetching results...