Submission #334581

#TimeUsernameProblemLanguageResultExecution timeMemory
334581iulia13Hyper-minimum (IZhO11_hyper)C++14
100 / 100
1056 ms40760 KiB
#include <iostream>
#include <deque>
using namespace std;
int a[50][50][50][50];
int b[50][50][50][50];
struct ura{
    int p, v;
};
deque <ura> dq;
void del()
{
    while (!dq.empty())
        dq.pop_back();
}
void scot1(int ind)
{
    while (!dq.empty() and dq.front().p < ind)
        dq.pop_front();
}
void scot2(int val, int poz)
{
    while (!dq.empty() and dq.back().v >= val)
        dq.pop_back();
}
int main()
{
    int n, m, i, j, k, l;
    cin >> n >> m;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            for (k = 1; k <= n; k++)
                for (l = 1; l <= n; l++)
                    cin >> a[i][j][k][l];
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            for (k = 1; k <= n; k++)
            {
                del();
                for (l = 1; l <= n; l++)
                {
                    if (l >= m)
                        scot1(l - m + 1);
                    scot2(a[i][j][k][l], l);
                    dq.push_back({l, a[i][j][k][l]});
                    if (l >= m)
                        a[i][j][k][l - m + 1] = dq.front().v;
                }
            }
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            for (l = 1; l <= n - m + 1; l++)
            {
                del();
                for (k = 1; k <= n; k++)
                {
                    if (k >= m)
                        scot1(k - m + 1);
                    scot2(a[i][j][k][l], k);
                    dq.push_back({k, a[i][j][k][l]});
                    if (k >= m)
                        a[i][j][k - m + 1][l] = dq.front().v;
                }
            }
    for (i = 1; i <= n; i++)
        for (k = 1; k <= n - m + 1; k++)
            for (l = 1; l <= n - m + 1; l++)
            {
                del();
                for (j = 1; j <= n; j++)
                {
                    if (j >= m)
                        scot1(j - m + 1);
                    scot2(a[i][j][k][l], j);
                    dq.push_back({j, a[i][j][k][l]});
                    if (j >= m)
                        a[i][j - m + 1][k][l] = dq.front().v;
                }
            }
     for (j = 1; j <= n - m + 1; j++)
        for (k = 1; k <= n - m + 1; k++)
            for (l = 1; l <= n - m + 1; l++)
            {
                del();
                for (i = 1; i <= n; i++)
                {
                    if (i >= m)
                        scot1(i - m + 1);
                    scot2(a[i][j][k][l], i);
                    dq.push_back({i, a[i][j][k][l]});
                    if (i >= m)
                        a[i - m + 1][j][k][l] = dq.front().v;
                }
            }
    for (i = 1; i <= n - m + 1; i++)
        for (j = 1; j <= n - m + 1; j++)
            for (k = 1; k <= n - m + 1; k++)
                for (l = 1; l <= n - m + 1; l++)
                    cout << a[i][j][k][l] << " ";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...