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
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int N = 1e5 + 5;
const int K = 10;

int tab[2][N];
bool zazn[2][N];
bool odw[2][N];

ll wyn[K + 1];

int n, k;

void fill(int p, int k){
    for(int i = 0; i <= 1; i++){
        for(int j = 1; j <= n; j++){
            if(tab[i][j] <= k && p <= tab[i][j]) zazn[i][j] = 1;
            else zazn[i][j] = 0;
        }
    }
}

void dfs(int x, int y){
    odw[x][y] = 1;
    if(x == 0 && zazn[1][y] && !odw[1][y]) dfs(1, y);
    if(x == 1 && zazn[0][y] && !odw[0][y]) dfs(0, y);
    if(y == 1){
        if(zazn[x][n] && !odw[x][n]) dfs(x, n);
    }
    else{
        if(zazn[x][y - 1] && !odw[x][y - 1]) dfs(x, y - 1);
    }

    if(y == n){
        if(zazn[x][1] && !odw[x][1]) dfs(x, 1);
    }
    else{
        if(zazn[x][y + 1] && !odw[x][y + 1]) dfs(x, y + 1);
    }
}

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

    cin >> n >> k;

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

    for(int p = 1; p <= 2 * n; p++){
        for(int k = 1; k <= 2 * n; k++){
            fill(p, k);

            int obsz = 0;

            for(int i = 0; i <= 1; i++){
                for(int j = 1; j <= n; j++){
                    if(zazn[i][j] && !odw[i][j]){
                        dfs(i, j);
                        obsz++;
                    }
                }
            }

            if(obsz <= k) wyn[obsz]++;

            //cout << p << " " << k << " " << obsz << "\n";

            for(int i = 0; i <= 1; i++){
                for(int j = 1; j <= n; j++){
                    odw[i][j] = 0;
                }
            }
        }
    }

    for(int i = 1; i <= k; i++) cout << wyn[i] << " ";
}