UTR 2 題目排列順序

2022-03-03 03:41:52 字數 1345 閱讀 3581

「又要出題了。」 宇宙出題中心主任 —— 吉公尺多出題斯基,坐在辦公桌前策劃即將到來的 uoi。

這場比賽有 $n$ 道題,吉公尺多出題斯基需要決定這些題目的難度,然後再在汪洋大海中尋找符合該難度的題目。

題目的難度可以用乙個 $1$ 到 $n$ 的排列$a_1, \dots, a_n$ 表示,其中 $a_i$ 表示第 $i$ 道題目在這 $n$ 道題目中是第 $a_i$ 簡單的題目,即恰有 $a_i - 1$ 道題目比第 $i$ 道題目簡單。

經驗豐富的吉公尺多出題斯基早就悟出了一種科學地決定難度順序的方法。首先,吉公尺多出題斯基定義了難度遞增子串行為序列 $a_, a_, \dots, a_$ ($1 \le p_1 < p_2 < \dots < p_k \le n$) 滿足 $a_ < a_ < \dots < a_$ 。然後,吉公尺多出題斯基決定了 $n$ 個整數 $f_1, \dots, f_n$,他希望找出乙個難度順序使得對於每個 $1 \le i \le n$ 均滿足以 $a_i$ 結尾的難度遞增子串行的最長長度恰好為 $f_i$。

但吉公尺多出題斯基日理萬機,於是他找到了你 —— 風璃殤做不出題耶維奇,請你幫助吉公尺多出題斯基構造乙個符合條件的 $a_1, \dots, a_n$ 吧!

第一行乙個正整數 $n$。

接下來一行 $n$ 個數,其中第 $i$ 個數表示 $f_i$。($1 \le f_i \le n$)

輸出一行 $n$ 個數,表示 $a_1, \dots, a_n$。

題目保證至少存在一組解。如有多組解,輸出任意一組均可。

測試點編號

$n$1

$\le 10$23

4$\le 1000$56

7$\le 10^5$89

10切道水題冷靜一下

很明顯的有乙個構造方法是,當前最大的數,應該放在\(f_i\)最大,若有相同的情況,要放在最前面的位置

#include#include#include#include#include#include#include#include#include#include#include#define ll long long

using namespace std;

inline char nc()

return *p1++;}

inline void read(int &x)

int wt,ss[19];

inline void print(int x)

}int n,ans[100010];

struct data

a[100010];

bool cmp(data x,data y)

int main()

uoj278 UTR 2 題目排列順序

題目 讀進來 f 之後,把權值作為第一關鍵字從小到大排序,位置作為第二關鍵字從大到小排序,這樣排序後的第 i 個位對應的位置就應該填數字 i 權值作為第一關鍵字,保證了出現在其之前的數權值必它小的填的數也比它小,權值必它大的填的數也比它大 權值相同時按照位置從大到小排序,這樣權值相同的一組就是遞減的...

UOJ278 UTR 2 題目排列順序

作者部落格 正解 排序.解題報告 考場上我是make了幾組資料,然後用暴力跑跑才發現的結論.比如說 顯然2只能由1轉移過來,3只能由2轉移過來,並且,相同權值的話,最後乙個顯然是最小的,不然就可以再加一了呀.所以按權值為第一關鍵字 從小到大 下標為第二關鍵字 從大到小 排序,依次編號即可。我在考場上...

280 UTR 2 題目難度提公升

最終吉公尺多出題斯基沒有找到優質的題目,於是高產的吉公尺多出題斯基決定自己出一道。首先,吉公尺多出題斯基腦洞了一道難度為 h1 的題目,然而吉公尺多出題斯基覺得太水了,於是把這題稍微改了改變成了一道難度為 h2 的。然而吉公尺多出題斯基還是覺得太水了,又稍微改了改變成了難度為 h3 的。如此進行下去...