P8686 [蓝桥杯 2019 省 A] 修改数组 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:如果一个数之前出现过,就给这个数加1;通过这种方式来实现让数组中没有重复整数
思路:考虑使用并查集,初始化并查集为A数组的数据范围
按题意,输出当前数的父节点,并把当前数的父节点更新为当前点的父节点 + 1即可(按照题目意思的修改方式)
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int, int> PII;
const int N = 1e6 + 20;
int n;
int p[N];
int find(int x)
{
if(p[x] != x) p[x] = find(p[x]);
return p[x];
}
void solve()
{
cin >> n;
for(int i = 1; i <= 1e6 + 10; i ++ ) p[i] = i;
for(int i = 1; i <= n; i ++ )
{
int x;
cin >> x;
x = find(x);
p[x] = find(x) + 1; //这个数用过了,下次再输入重复的数就让它的父节点加一就可以了
cout << x << " ";
}
}
signed main()
{
int t = 1;
//cin >> t;
while(t -- ) solve();
return 0;
}