제출 #1323493

#제출 시각아이디문제언어결과실행 시간메모리
1323493MuhammadSaram최솟값 배열 (IZhO11_hyper)C++20
100 / 100
717 ms38544 KiB
#include <bits/stdc++.h> using namespace std; const int M = 36; int suf[M][M][M][M][3], a[M][M][M][M]; int main() { int n,m; cin>>n>>m; 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>>a[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++) { multiset<int> se; for (int l=n-1;l>=0;l--) { se.insert(a[i][j][k][l]); if (se.size()==m) suf[i][j][k][l][2]=*se.begin(), se.erase(se.find(a[i][j][k][l+m-1])); } } for (int i=0;i<n;i++) for (int j=0;j<n;j++) { for (int l=0;l+m<=n;l++) { multiset<int> se; for (int k=n-1;k>=0;k--) { se.insert(suf[i][j][k][l][2]); if (se.size()==m) suf[i][j][k][l][1]=*se.begin(), se.erase(se.find(suf[i][j][k+m-1][l][2])); } } } for (int i=0;i<n;i++) for (int k=0;k+m<=n;k++) for (int l=0;l+m<=n;l++) { multiset<int> se; for (int j=n-1;j>=0;j--) { se.insert(suf[i][j][k][l][1]); if (se.size()==m) suf[i][j][k][l][0]=*se.begin(), se.erase(se.find(suf[i][j+m-1][k][l][1])); } } for (int j=0;j+m<=n;j++) for (int k=0;k+m<=n;k++) for (int l=0;l+m<=n;l++) { multiset<int> se; for (int i=n-1;i>=0;i--) { se.insert(suf[i][j][k][l][0]); if (se.size()==m) a[i][j][k][l]=*se.begin(), se.erase(se.find(suf[i+m-1][j][k][l][0])); } } m=n-m+1; for (int i=0;i<m;i++) for (int j=0;j<m;j++) for (int k=0;k<m;k++) for (int l=0;l<m;l++) cout<<a[i][j][k][l]<<' '; cout<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...