#include <bits/stdc++.h>
using namespace std;
constexpr int S = 1e5 + 3;
int n, k, wynik = 0, act = 0, l, i, j;
int tab[2][S];
int odw[2][S];
map<int, int> m;
int g(int v)
{
return (v + 1) % 2;
}
int d(int v)
{
if(v > n)
return 1;
if(v < 1)
return n;
return v;
}
bool pasuje(int vx, int vy)
{
return tab[vx][vy] >= i && tab[vx][vy] <= j;
}
void dfs(int vx, int vy)
{
if(odw[g(vx)][vy] != act && pasuje(g(vx), vy))
{
odw[g(vx)][vy] = act;
dfs(g(vx), vy);
}
if(odw[vx][d(vy + 1)] != act && pasuje(vx, d(vy + 1)))
{
odw[vx][d(vy + 1)] = act;
dfs(vx, d(vy + 1));
}
if(odw[vx][d(vy - 1)] != act && pasuje(vx, d(vy - 1)))
{
odw[vx][d(vy - 1)] = act;
dfs(vx, d(vy - 1));
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> k;
for(i = 0; i < 2; i++)
{
for(j = 1; j <= n; j++)
cin >> tab[i][j];
}
for(i = 1; i <= (n << 1); i++)
{
for(j = i; j <= (n << 1); j++)
{
l = 0;
act++;
for(int x = 0; x < 2; x++)
{
for(int y = 1; y <= n; y++)
{
if(odw[x][y] != act && pasuje(x, y))
{
l++;
odw[x][y] = act;
dfs(x, y);
}
}
}
m[l]++;
}
}
for(i = 1; i <= k; i++)
{
cout << m[i] << ' ';
}
return 0;
}
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 | #include <bits/stdc++.h> using namespace std; constexpr int S = 1e5 + 3; int n, k, wynik = 0, act = 0, l, i, j; int tab[2][S]; int odw[2][S]; map<int, int> m; int g(int v) { return (v + 1) % 2; } int d(int v) { if(v > n) return 1; if(v < 1) return n; return v; } bool pasuje(int vx, int vy) { return tab[vx][vy] >= i && tab[vx][vy] <= j; } void dfs(int vx, int vy) { if(odw[g(vx)][vy] != act && pasuje(g(vx), vy)) { odw[g(vx)][vy] = act; dfs(g(vx), vy); } if(odw[vx][d(vy + 1)] != act && pasuje(vx, d(vy + 1))) { odw[vx][d(vy + 1)] = act; dfs(vx, d(vy + 1)); } if(odw[vx][d(vy - 1)] != act && pasuje(vx, d(vy - 1))) { odw[vx][d(vy - 1)] = act; dfs(vx, d(vy - 1)); } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> k; for(i = 0; i < 2; i++) { for(j = 1; j <= n; j++) cin >> tab[i][j]; } for(i = 1; i <= (n << 1); i++) { for(j = i; j <= (n << 1); j++) { l = 0; act++; for(int x = 0; x < 2; x++) { for(int y = 1; y <= n; y++) { if(odw[x][y] != act && pasuje(x, y)) { l++; odw[x][y] = act; dfs(x, y); } } } m[l]++; } } for(i = 1; i <= k; i++) { cout << m[i] << ' '; } return 0; } |
English