#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n, m;
vector < vector < vector < vector <int> > > > v, one, two, three, four;
deque <int> q;
void Resize(vector < vector < vector < vector <int> > > > &k) {
k.resize(n);
for (int i = 0; i < n; ++i) {
k[i].resize(n);
for (int j = 0; j < n; ++j) {
k[i][j].resize(n);
for (int x = 0; x < n; ++x) {
k[i][j][x].resize(n);
}
}
}
}
void Clear() {
while (!q.empty()) q.pop_back();
}
int main() {
cin.tie(0); cout.tie(0);
ios_base::sync_with_stdio(false);
cin >> n >> m;
Resize(v);
Resize(one);
Resize(two);
Resize(three);
Resize(four);
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
for (int x = 0; x < n; ++x) {
for (int y = 0; y < n; ++y) {
cin >> v[i][j][x][y];
}
}
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
for (int x = 0; x < n; ++x) {
Clear();
for (int y = n - 1; y >= 0; --y) {
while (!q.empty() && v[i][j][x][q.back()] >= v[i][j][x][y]) q.pop_back();
while (!q.empty() && y + m - 1 < q.front()) q.pop_front();
q.push_back(y);
if (y <= n - m) one[i][j][x][y] = v[i][j][x][q.front()];
}
}
}
}
for (int y = 0; y <= n - m; ++y) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
Clear();
for (int x = n - 1; x >= 0; --x) {
while (!q.empty() && one[i][j][q.back()][y] >= one[i][j][x][y]) q.pop_back();
while (!q.empty() && x + m - 1 < q.front()) q.pop_front();
q.push_back(x);
if (x <= n - m) two[i][j][x][y] = one[i][j][q.front()][y];
}
}
}
}
for (int x = 0; x <= n - m; ++x) {
for (int y = 0; y <= n - m; ++y) {
for (int i = 0; i < n; ++i) {
Clear();
for (int j = n - 1; j >= 0; --j) {
while (!q.empty() && two[i][q.back()][x][y] >= two[i][j][x][y]) q.pop_back();
while (!q.empty() && j + m - 1 < q.front()) q.pop_front();
q.push_back(j);
if (j <= n - m) three[i][j][x][y] = two[i][q.front()][x][y];
}
}
}
}
for (int j = 0; j <= n - m; ++j) {
for (int x = 0; x <= n - m; ++x) {
for (int y = 0; y <= n - m; ++y) {
Clear();
for (int i = n - 1; i >= 0; --i) {
while (!q.empty() && three[q.back()][j][x][y] >= three[i][j][x][y]) q.pop_back();
while (!q.empty() && i + m - 1 < q.front()) q.pop_front();
q.push_back(i);
if (i <= n - m) four[i][j][x][y] = three[q.front()][j][x][y];
}
}
}
}
for (int i = 0; i <= n - m; ++i) {
for (int j = 0; j <= n - m; ++j) {
for (int x = 0; x <= n - m; ++x) {
for (int y = 0; y <= n - m; ++y) {
cout << four[i][j][x][y] << " ";
}
}
}
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |