洛谷 P1338 末日的傳說

2022-08-02 06:21:11 字數 753 閱讀 3449

大概題意:

就是求 1

'>1

到n'>

n 的排列中字典序最小的乙個滿足逆序對個數為m

'>

m的排列。

1'>n

'>m

'>分析:

首先我們要知道乙個排列能有的最多逆序對  n*(n-1)*/2 即當他為嚴格遞增序列時;而我們又知道逆序對越多該數列的字典序越大;因此可對題意這樣分析,很明顯從最小的數 ( i )開始考慮 如果除去該數 剩餘的數 ( n - i ) 依然能構成大於等於m的逆序對  (n-i)*(n-i-1)/2>=m;可將該數放在最前面,否則 將它放在末端,此時的數既可以做出最大的貢獻(構成了 n-i 個逆序對),更新m;

還有一點要注意啦!!!!!

因為資料是5e4,做乘法是會爆int 切記要 long long

詳細見**:

1 #include2

using

namespace

std;

3#define ll long long

4const

int maxn=5e4+5;5

ll ma[maxn];

6int

main()717

else21}

22for(ll i=1;i<=n;i++)

2327

else30}

31 printf("\n"

);32

return0;

33 }

洛谷P1338(末日的傳說)

只要是參加jsoi活動的同學一定都聽說過hanoi塔的傳說 三根柱子上的金片每天被移動一次,當所有的金片都被移完之後,世界末日也就隨之降臨了。在古老東方的幻想鄉,人們都採用一種奇特的方式記錄日期 他們用一些特殊的符號來表示從1開始的連續整數,1表示最小而n表示最大。創世紀的第一天,日曆就被賦予了生命...

洛谷P1338 末日的傳說

qaq本來不是多難的題,然鵝我折騰了半天。看到乙個挺不錯的想法 我們知道,對於乙個長度為n的序列而言,其最大的逆序對的個數為n n 1 2,題目是要求乙個逆序數為m的字典序最小的序列。那我們不妨從1開始考慮每乙個數的排列,這樣每次考慮的都是當前最小的數 如果把這個數放在最前面,而剩下的數的排列的逆序...

洛谷P1338 末日的傳說

只要是參加jsoi活動的同學一定都聽說過hanoi塔的傳說 三根柱子上的金片每天被移動一次,當所有的金片都被移完之後,世界末日也就隨之降臨了。在古老東方的幻想鄉,人們都採用一種奇特的方式記錄日期 他們用一些特殊的符號來表示從1開始的連續整數,1表示最小而n表示最大。創世紀的第一天,日曆就被賦予了生命...