1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

void znajdz_obszar_tyl(int& pocz, int& kon, int& n, int wiersz, int kolumna, int**& obraz, bool**& obszar) {
    if (pocz <= obraz[wiersz][kolumna] && obraz[wiersz][kolumna] <= kon && !obszar[wiersz][kolumna]) {
        obszar[wiersz][kolumna] = true;
    }

    if (pocz <= obraz[wiersz][kolumna - 1] && obraz[wiersz][kolumna - 1] <= kon && !obszar[wiersz][kolumna - 1]) {
        znajdz_obszar_tyl(pocz, kon, n, wiersz, kolumna - 1, obraz, obszar);
    }

    if (wiersz == 0) wiersz = 1;
    else wiersz = 0;

    if (pocz <= obraz[wiersz][kolumna] && obraz[wiersz][kolumna] <= kon && !obszar[wiersz][kolumna]) {
        znajdz_obszar_tyl(pocz, kon, n, wiersz, kolumna, obraz, obszar);
    }
}


void znajdz_obszar(int &pocz, int &kon, int &n, int wiersz, int kolumna, int** &obraz, bool**& obszar) {
    if (pocz <= obraz[wiersz][kolumna] && obraz[wiersz][kolumna] <= kon && !obszar[wiersz][kolumna]) {
        obszar[wiersz][kolumna] = true;
    }

    if (kolumna == 0) {
        if (!obszar[wiersz][n - 1] && pocz <= obraz[wiersz][n - 1] && obraz[wiersz][n - 1] <= kon)
            znajdz_obszar_tyl(pocz, kon, n, wiersz, n-1, obraz, obszar);
            
    }
    if (kolumna == n-1) {
        if (!obszar[wiersz][0] && pocz <= obraz[wiersz][0] && obraz[wiersz][0] <= kon)
            obszar[wiersz][0] = true;
    }

    if (pocz <= obraz[wiersz][kolumna+1]&& obraz[wiersz][kolumna+1] <= kon && !obszar[wiersz][kolumna+1]) {
        znajdz_obszar(pocz, kon, n, wiersz, kolumna+1, obraz, obszar);
    }

    if (wiersz == 0) wiersz = 1;
    else wiersz = 0;

    if (pocz <= obraz[wiersz][kolumna] && obraz[wiersz][kolumna] <= kon && !obszar[wiersz][kolumna]) {
        obszar[wiersz][kolumna] = true;
        znajdz_obszar(pocz, kon, n, wiersz, kolumna, obraz, obszar);
    }
}

int ciekawosc_przedzialu(int pocz, int kon,int n, int k, int **obraz) {

    int ciekawosc = 0;
    bool** obszary = new bool*[2];
    for (int i = 0; i < 2; i++)
    {
        obszary[i] = new bool[n];
        fill(obszary[i], obszary[i] + n, false);
    }

    for (int i = 0; i < n; i++)
    {
        if (pocz <= obraz[0][i] && obraz[0][i] <= kon && !obszary[0][i]) {
            znajdz_obszar(pocz, kon, n, 0, i, obraz, obszary);
            ciekawosc++;
        }
        else if (pocz <= obraz[1][i] && obraz[1][i] <= kon && !obszary[1][i]) {
            znajdz_obszar(pocz, kon, n, 1, i, obraz, obszary);
            ciekawosc++;
        }
        if (ciekawosc > k) return k + 1;
    }

    return ciekawosc;

}

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

    int n, k;
    cin >> n >> k;

    int** obraz = new int*[2];
    for (int i = 0; i < 2; i++)
    {
        obraz[i] = new int[n];
    }

    for (int i = 0; i < n; i++)
    {
        cin >> obraz[0][i];
    }
    for (int i = 0; i < n; i++)
    {
        cin >> obraz[1][i];
    }


    vector<int> ciekawosci;

    for (int pocz_przedzialu = 1; pocz_przedzialu <= 2 * n; pocz_przedzialu++)
    {
        for (int kon_przedzialu = pocz_przedzialu; kon_przedzialu <= 2 * n; kon_przedzialu++)
        {
            int ciekawosc = ciekawosc_przedzialu(pocz_przedzialu, kon_przedzialu, n,k, obraz);
            ciekawosci.push_back(ciekawosc);
        }
    }

    for (int i = 1; i <= k; i++)
    {
        cout << count(ciekawosci.begin(), ciekawosci.end(), i) << ' ';
    }
}