제출 #1269140

#제출 시각아이디문제언어결과실행 시간메모리
1269140proofy최솟값 배열 (IZhO11_hyper)C++20
100 / 100
359 ms98364 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); } void shrink_arrays(node* a, int dimension) { if (dimension == 1) { for (int i = 0; i < n; i++) c[i] = &a->v[i]->value; return void(transform()); } for (int i = 0; i < n; i++) shrink_arrays(a->v[i], dimension - 1); } void shrink(node* a, int dimension) { if (!dimension) return; for (int i = 0; i < dimension; i++) { shrink_arrays(a, dimension); shift(a, dimension); } } const int D = 4; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; node* a = new node(); input(a, D); shrink(a, D); output(a, D); }
#Verdict Execution timeMemoryGrader output
Fetching results...