TAG
- 算法 − 【并查集】、典题 − 【并查集求最小值】 算法 - 【并查集】、典题 - 【并查集求最小值】 算法−【并查集】、典题−【并查集求最小值】时间复杂度
- O ( ∗ ) O(\ast) O(∗)
//
#include <bits/stdc++.h>
using namespace std;
// #defeine int long long
// #define size sz
const int N = 2e6 + 7;
int dad[N + 5], size[N + 5];
int in[N], ans[N];
void init() {
for (int i = 1; i <= N; i++) dad[i] = i;
}
int get_dad(int x) {
//
return dad[x] = dad[x] == x ? x : get_dad(dad[x]);
}
void link_dad(int x, int y) {
dad[get_dad(x)] = get_dad(y);
}
void solve() {
init();
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &in[i]);
for (int i = 1; i <= n; i++) {
ans[i] = get_dad(in[i]);
link_dad(ans[i], ans[i] + 1);
}
for (int i = 1; i <= n; i++) {
printf("%d%c", ans[i], " \n"[i == n]);
}
// for (int i = 1; i <= n; i++) {
// int ai;
// scanf("%d", &ai);
// ai = get_dad(ai);
// link_dad(ai, ai + 1);
// printf("%d%c", ai, " \n"[i == n]);
// }
}
signed main() {
int t = 1;
// scanf("%d", &t);
while (t--) solve();
return 0;
}
实现细节
- `
参考示意图
-
`
参考链接
- `
作者 | 乐意奥AI