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

int a[100'009][3];
ll odp[11];
ll zaj[109][2];
int n,k;
void dfs(int x, int y, int l, int r){
    if (a[x][1-y] >= l && a[x][1-y]<=r && zaj[x][1-y] != zaj[x][y]){
        zaj[x][1-y] = zaj[x][y];
        dfs(x,1-y,l,r);
    }
    if (a[(x+1)%n][y] >= l && a[(x+1)%n][y]<=r && zaj[(x+1)%n][y] != zaj[x][y]){
        zaj[(x+1)%n][y] = zaj[x][y];
        dfs((x+1)%n,y,l,r);
    }
    if (n>=3 && a[(x-1+n)%n][y] >= l && a[(x-1+n)%n][y]<=r && zaj[(x-1+n)%n][y] != zaj[x][y]){
        zaj[(x-1+n)%n][y] = zaj[x][y];
        dfs((x-1+n)%n,y,l,r);
    }
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> k;
    for (int x=0;x<n;x++){
        cin >> a[x][0];
    }
    for (int x=0;x<n;x++){
        cin >> a[x][1];
    }
    if (n<=100){
        for (int l=1;l<=2*n;l++){
            for (int r=l;r<=2*n;r++){
                int jeden=l*2*n+r;
                ll ciekawosc = 0;
                for (int x=0;x<n;x++){
                    for (int y=0;y<2;y++){
                        if (a[x][y] > r || a[x][y] < l || zaj[x][y] == jeden){
                            continue;
                        }
                        zaj[x][y] = jeden;
                        dfs(x,y,l,r);
                        ciekawosc += 1;
                    }
                }
                if (ciekawosc<=k){
                    odp[ciekawosc] += 1;
                }
            }
        }
        for (int x=1;x<=k;x++){
            cout << odp[x] << ' ';
        }
    }
    return 0;
}