제출 #1356728

#제출 시각아이디문제언어결과실행 시간메모리
1356728nathlol2최솟값 배열 (IZhO11_hyper)C++20
100 / 100
276 ms71480 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 50;
int n, m, a[N][N][N][N], b[N][N][N][N], c[N][N][N][N], d[N][N][N][N], e[N][N][N][N];

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n >> m;
    for(int i = 1;i<=n;i++) for(int j = 1;j<=n;j++) for(int k = 1;k<=n;k++) for(int l = 1;l<=n;l++) cin >> a[i][j][k][l];
    for(int i = 1;i<=n;i++) for(int j = 1;j<=n;j++) for(int k = 1;k<=n;k++){
        multiset<int> s;
        for(int l = 1;l<=m;l++){
            s.insert(a[i][j][k][l]);
        }
        b[i][j][k][1] = *s.begin();
        for(int l = 2;l + m - 1<=n;l++){
            s.erase(s.find(a[i][j][k][l - 1]));
            s.insert(a[i][j][k][l + m - 1]);
            b[i][j][k][l] = *s.begin();
        }
    }
    for(int i = 1;i<=n;i++) for(int j = 1;j<=n;j++) for(int l = 1;l + m - 1<=n;l++){
        multiset<int> s;
        for(int k = 1;k<=m;k++){
            s.insert(b[i][j][k][l]);
        }
        c[i][j][1][l] = *s.begin();
        for(int k = 2;k + m - 1<=n;k++){
            s.erase(s.find(b[i][j][k - 1][l]));
            s.insert(b[i][j][k + m - 1][l]);
            c[i][j][k][l] = *s.begin();
        }
    }
    for(int i = 1;i<=n;i++) for(int k = 1;k + m - 1<=n;k++) for(int l = 1;l + m - 1<=n;l++){
        multiset<int> s;
        for(int j = 1;j<=m;j++){
            s.insert(c[i][j][k][l]);
        }
        d[i][1][k][l] = *s.begin();
        for(int j = 2;j + m - 1<=n;j++){
            s.erase(s.find(c[i][j - 1][k][l]));
            s.insert(c[i][j + m - 1][k][l]);
            d[i][j][k][l] = *s.begin();
        }
    }
    for(int j = 1;j + m - 1<=n;j++) for(int k = 1;k + m - 1<=n;k++) for(int l = 1;l + m - 1<=n;l++){
        multiset<int> s;
        for(int i = 1;i<=m;i++){
            s.insert(d[i][j][k][l]);
        }
        e[1][j][k][l] = *s.begin();
        for(int i = 2;i + m - 1<=n;i++){
            s.erase(s.find(d[i - 1][j][k][l]));
            s.insert(d[i + m - 1][j][k][l]);
            e[i][j][k][l] = *s.begin();
        }
    }
    for(int i = 1;i + m - 1<=n;i++) for(int j = 1;j + m - 1<=n;j++) for(int k = 1;k + m - 1<=n;k++) for(int l = 1;l + m - 1<=n;l++) cout << e[i][j][k][l] << ' ';
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…