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
#include<bits/stdc++.h>
using namespace std;
int n,k,nal[200001],ilnal[200001];
int kolor[100001][2],gdzie[200001][2],iles;
long long odp[11];
int znajdz(int a)
{
	if(nal[a]==a)
		return a;
	nal[a]=znajdz(nal[a]);
	return nal[a];
}
void zlacz(int a,int b)
{
	a=znajdz(a);
	b=znajdz(b);
	if(a==b)
		return;
	--iles;
	nal[a]=b;
}
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=0;i<=1;++i)
		for(int j=0;j<n;++j)
		{
			scanf("%d",&kolor[j][i]);
			gdzie[kolor[j][i]][0]=j;
			gdzie[kolor[j][i]][1]=i;
		}
	for(int l=1;l<=2*n;++l)
	{
		iles=0;
		for(int k=l;k<=2*n;++k)
		{
			nal[k]=k;
			ilnal[k]=1;
			++iles;
			if(kolor[gdzie[k][0]][1^gdzie[k][1]]>=l&&kolor[gdzie[k][0]][1^gdzie[k][1]]<=k)
				zlacz(kolor[gdzie[k][0]][1^gdzie[k][1]],k);
			if(kolor[(gdzie[k][0]-1+n)%n][gdzie[k][1]]>=l&&kolor[(gdzie[k][0]-1+n)%n][gdzie[k][1]]<=k)
				zlacz(kolor[(gdzie[k][0]-1+n)%n][gdzie[k][1]],k);
			if(kolor[(gdzie[k][0]+1)%n][gdzie[k][1]]>=l&&kolor[(gdzie[k][0]+1)%n][gdzie[k][1]]<=k)
				zlacz(kolor[(gdzie[k][0]+1)%n][gdzie[k][1]],k);
			if(iles<=10)
			++odp[iles];
		}
	}
	for(int i=1;i<=k;++i)
		printf("%lld ",odp[i]);
	return 0;
}