修改数组
解题方法: 并查集+路径压缩
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define N 1100010
using namespace std;
int p[N],n;
int find(int x)
{
if(p[x] != x) p[x] = find(p[x]);
return p[x];
}
int main()
{
scanf("%d",&n);
for(int i = 1;i < N;i ++) p[i] = i;
for(int i = 1;i <= n;i ++)
{
int x;
scanf("%d",&x);
x = find(x); //从x开始往右边第一个没有被用过的数
printf("%d ",x);
p[x] = x + 1;
}
return 0;
}