長さNの配列A = [A1、A2、⋅⋅⋅AN]が与えられた場合、配列内に整数が繰り返される可能性があります。
Xiao Mingは、次のように整数を繰り返さない配列に変更する必要があります。
Xiao Mingは、A2、A3、⋅⋅⋅、ANを順番に変更します。
Aiを変更する場合、Xiao MingはAiがA1∼Ai-1に出現したかどうかを確認します。
出現した場合、XiaomingはAiに1を追加します。新しいAiが以前に出現した場合、XiaomingはAiがA1∼Ai-1に出現しなくなるまで、Aiに1を追加し続けます。
ANも上記の変更を行った場合、A配列に繰り返される整数がないことは明らかです。
最初のA配列が与えられたら、最後のA配列を計算してください。
入力フォーマットの
最初の行には整数Nが含まれています。
2行目には、N個の整数A1、A2、⋅⋅⋅、ANが含まれています。
出力フォーマットは
N個の整数を出力し、最後にA1、A2、⋅⋅⋅、ANが続きます。
データ範囲
1≤N≤105、
1≤Ai≤106の
入力例:
5
2 1 3 4
の出力例:
1 2 3 4 5
コードは次のように表示されます。
#include <iostream>
using namespace std;
const int N = 1000010;
int a[N];
int find(int x)
{
if (a[x]!=x) a[x] = find(a[x]);
return a[x];
}
int main()
{
int n;
cin>>n;
for (int i = 1;i<=N;i++) a[i] = i;
for (int i = 1;i<=n;i++)
{
int x;
cin>>x;
x = find(x);
cout<<a[x]<<" ";
a[x] = x+1;
}
return 0;
}