#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; } |