P8686
这道题可以采用并查集的方法来做。
先理清一下题意,我们需要将一个有重复整数的数组变为无重复整数的数组。对于
当前面没有
我们可以设置一个并查集,在每次出现
AC CODE:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+10;
int num,ans;
int fa[100100];
int find(int x)//并查集中的查询操作
{
if(x==fa[x]) return x;
return fa[x]=find(fa[x]);
}
int main()
{
int n;
cin>>n;
for (int i=1;i<100100;i++)//所有数最开始都应指向它本身
{
fa[i]=i;
}
int a;
for (int i=1;i<=n;i++)
{
cin>>a;
a=find(a);//查询这个数
fa[a]=find(a)+1;//修改它的父节点
cout<<a<<" ";
}
return 0;
}