Submission #572246

#TimeUsernameProblemLanguageResultExecution timeMemory
572246SSRSHyper-minimum (IZhO11_hyper)C++14
100 / 100
790 ms22320 KiB
#include <bits/stdc++.h>
using namespace std;
vector<int> slide_min(vector<int> &A, int M){
  int N = A.size();
  deque<int> dq;
  vector<int> ans(N - M + 1);
  for (int i = 0; i < N; i++){
    while (!dq.empty()){
      if (A[dq.back()] >= A[i]){
        dq.pop_back();
      } else {
        break;
      }
    }
    dq.push_back(i);
    if (i >= M - 1){
      ans[i - M + 1] = A[dq.front()];
      if (dq.front() == i - M + 1){
        dq.pop_front();
      }
    }
  }
  return ans;
}
int main(){
  int N, M;
  cin >> N >> M;
  vector<vector<vector<vector<int>>>> X(N, vector<vector<vector<int>>>(N, vector<vector<int>>(N, vector<int>(N))));
  for (int i = 0; i < N; i++){
    for (int j = 0; j < N; j++){
      for (int k = 0; k < N; k++){
        for (int l = 0; l < N; l++){
          cin >> X[i][j][k][l];
        }
      }
    }
  }
  for (int i = 0; i < N; i++){
    for (int j = 0; j < N; j++){
      for (int k = 0; k < N; k++){
        vector<int> A = X[i][j][k];
        vector<int> B = slide_min(A, M);
        for (int l = 0; l <= N - M; l++){
          X[i][j][k][l] = B[l];
        }
      }
    }
  }
  for (int i = 0; i < N; i++){
    for (int j = 0; j < N; j++){
      for (int k = 0; k <= N - M; k++){
        vector<int> A(N);
        for (int l = 0; l < N; l++){
          A[l] = X[i][j][l][k];
        }
        vector<int> B = slide_min(A, M);
        for (int l = 0; l <= N - M; l++){
          X[i][j][l][k] = B[l];
        }
      }
    }
  }
  for (int i = 0; i < N; i++){
    for (int j = 0; j <= N - M; j++){
      for (int k = 0; k <= N - M; k++){
        vector<int> A(N);
        for (int l = 0; l < N; l++){
          A[l] = X[i][l][j][k];
        }
        vector<int> B = slide_min(A, M);
        for (int l = 0; l <= N - M; l++){
          X[i][l][j][k] = B[l];
        }
      }
    }
  }
  for (int i = 0; i <= N - M; i++){
    for (int j = 0; j <= N - M; j++){
      for (int k = 0; k <= N - M; k++){
        vector<int> A(N);
        for (int l = 0; l < N; l++){
          A[l] = X[l][i][j][k];
        }
        vector<int> B = slide_min(A, M);
        for (int l = 0; l <= N - M; l++){
          X[l][i][j][k] = B[l];
        }
      }
    }
  }
  for (int i = 0; i <= N - M; i++){
    for (int j = 0; j <= N - M; j++){
      for (int k = 0; k <= N - M; k++){
        for (int l = 0; l <= N - M; l++){
          cout << X[i][j][k][l];
          if (i < N - M || j < N - M || k < N - M || l < N - M){
            cout << ' ';
          }
        }
      }
    }
  }
  cout << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...