藍橋杯省賽 修改陣列(並查集)

2021-10-03 16:07:34 字數 944 閱讀 7857

給定乙個長度為n 的陣列a = [a1, a2,…,an],陣列中有可能有重複出現的整數。

現在小明要按以下方法將其修改為沒有重複整數的陣列。小明會依次修改a2,a3,…, an。當修改ai 時,小明會檢查ai 是否在a1~ ai-1 **現過。如果出現過,則小明會給ai 加上1 ;如果新的ai 仍在之前出現過,小明會持續給ai 加1 ,直到ai 沒有在a1~ai-1**現過。當an 也經過上述修改之後,顯然a陣列中就沒有重複的整數了。

現在給定初始的a 陣列,請你計算出最終的a 陣列。

輸入

第一行包含乙個整數n(1<=n<=100000)

第二行包含n個整數a1,a2,…,an(1<=ai<=1000000)

輸出

輸出n個整數,依次是最終的a1,a2,…,an

樣例輸入

52 1 1 3 4

樣例輸出

2 1 3 4 5

題解next [ ] 陣列儲存該數字下乙個該存放的位置。如果有衝突,那麼就把該數字變為next[ ] 中的數字,然後更新該位置的資訊即可。只有當next[i]=i 的時候。該位置才「空閒」,才可以存放,否則原來的位置有數字了,就要把新的數字往後挪到 next[i] 指示的位置,而不是,乙個乙個挪,再判斷。

#include

using

namespace std;

int ans[

200000];

int nnext[

1000000];

intfind

(int i)

intmain()

for(

int i =

0; i < n; i++

)return0;

}

藍橋杯 修改陣列 並查集

修改陣列 時間限制 1.0s 記憶體限制 256.0mb 本題總分 20 分 問題描述 給定乙個長度為 n 的陣列 a a1,a2,an 陣列中有可能有重複出現的整數。現在小明要按以下方法將其修改為沒有重複整數的陣列。小明會依次修改 a2,a3,an。當修改 ai 時,小明會檢查 ai 是否在 a1...

藍橋杯 並查集

c國由n個小島組成,為了方便小島之間聯絡,c國在小島間建立了m座大橋,每座大橋連線兩座小島。兩個小島間可能存在多座橋連線。然而,由於海水沖刷,有一些大橋面臨著不能使用的危險。如果兩個小島間的所有大橋都不能使用,則這兩座小島就不能直接到達了。然而,只要這兩座小島的居民能通過其他的橋或者其他的小島互相到...

第十屆藍橋杯省賽A組(C C 組)修改陣列

每輸入乙個數就用visit陣列記錄這個數已經輸入過了的記錄,這樣輸入下乙個數的時候,判斷一下是否是前面有的數。這是保留流做法,耗記憶體。include includeusing namespace std bool visit 10000 用陣列記錄乙個數是否被使用過 int main visit ...