単一リンクリストタイプの共用体検索セットのアプリケーション例

長さ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;
}

おすすめ

転載: blog.csdn.net/m0_51955470/article/details/114109161