#include <iostream>
#include <cstring>
using namespace std;
long long p[200000], c[200000], pp[2][100000], r[200000], h[200000];
long long n, k, q, i, ps, mm, m, j, a, b, x,s[3],y, v[11],z;
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
cin >> n;
cin >> k;
for (j = 0; j < 11; j++) v[j] = 0;
for (i = 0; i < 2; i++)
for (j = 0; j < n; j++) {
cin >> a;
p[a - 1] = j;
c[a - 1] = i;
pp[i][j] = a - 1;
}
for (i = 0; i < 2 * n; i++) {
x = 0;
for (j = i; j < 2 * n; j++) {
x++;
a = p[j];
b = c[j];
r[j] = j;
s[0] = pp[(b + 1) % 2][a];
s[1] = pp[b][(a + 1) % n];
s[2] = pp[b][(n + a - 1) % n];
for(m=0;m<3;m++)
if (s[m] < j && s[m] >= i) {
a = s[m];
b = 0;
while (r[a] != a) {
h[b] = a;
b++;
a = r[a];
}
q = j;
while (r[q] != q) {
h[b] = q;
b++;
q = r[q];
}
if (a != q) {
x--;
for (y = 0; y < ps; y++)
r[h[y]] = q;
r[a] = q;
}
}
//printf("%ld ", i);
//printf("%ld ", j);
//printf("%ld \n",x);
if(x<11)
v[x] += 1;
}
}
for (j = 1; j <= k; j++)
printf("%ld ", v[j]);
}
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 | #include <iostream> #include <cstring> using namespace std; long long p[200000], c[200000], pp[2][100000], r[200000], h[200000]; long long n, k, q, i, ps, mm, m, j, a, b, x,s[3],y, v[11],z; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); cin >> n; cin >> k; for (j = 0; j < 11; j++) v[j] = 0; for (i = 0; i < 2; i++) for (j = 0; j < n; j++) { cin >> a; p[a - 1] = j; c[a - 1] = i; pp[i][j] = a - 1; } for (i = 0; i < 2 * n; i++) { x = 0; for (j = i; j < 2 * n; j++) { x++; a = p[j]; b = c[j]; r[j] = j; s[0] = pp[(b + 1) % 2][a]; s[1] = pp[b][(a + 1) % n]; s[2] = pp[b][(n + a - 1) % n]; for(m=0;m<3;m++) if (s[m] < j && s[m] >= i) { a = s[m]; b = 0; while (r[a] != a) { h[b] = a; b++; a = r[a]; } q = j; while (r[q] != q) { h[b] = q; b++; q = r[q]; } if (a != q) { x--; for (y = 0; y < ps; y++) r[h[y]] = q; r[a] = q; } } //printf("%ld ", i); //printf("%ld ", j); //printf("%ld \n",x); if(x<11) v[x] += 1; } } for (j = 1; j <= k; j++) printf("%ld ", v[j]); } |
polski