제출 #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...