51nod 1241 特殊的排序

2022-07-23 17:33:22 字數 585 閱讀 4817

【題解】  

設滿足前後兩個元素之差為1的最長上公升子串行lis的長度為m,那麼本題的答案即為n-m.

證明:1,n-m次移動一定可以讓序列遞增。設lis的第乙個數為i,最後乙個數為j,我們按照i-1到1的遞減的順序把這些數調換到第乙個位置,它們就排好序了。同理處理j+1到n. 總共需要n-m次移動。

2,不存在小於n-m次的移動方法。因為如果只需移動k次,km),於lis的長度為m矛盾。

1 #include2 #include3 #include4

#define ll long long

5#define rg register

6#define n 200010

7using

namespace

std;

8int

n,m,ans,a[n],f[n];

9 inline int

read()

15int

main()

view code

51Nod 1241 特殊的排序

題目傳送門 分析 之前想的是求lis,後面發現這組資料會出問題 3 1 2 4 5 6。其實這裡的lis還應當滿足前後兩個元素的值相差為1。比如上面的最長子串行為 3 4 5 6,而不是1 2 4 5 6。即只需移動1 2即可。即如果n個數最長連續上公升子串行 這裡的連續指數值上連續,即前後相差1 ...

51nod 1241 特殊的排序

1241 特殊的排序 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 乙個陣列的元素為1至n的整數,現在要對這個陣列進行排序,在排序時只能將元素放在陣列的頭部或尾部,問至少需要移動多少個數字,才能完成整個排序過程?例如 2 5 3 4 1 將1移到頭部 1 2 5...

51Nod 1241 特殊的排序

乙個陣列的元素為1至n的整數,現在要對這個陣列進行排序,在排序時只能將元素放在陣列的頭部或尾部,問至少需要移動多少個數字,才能完成整個排序過程?例如 2 5 3 4 1 將1移到頭部 1 2 5 3 4 將5移到尾部 1 2 3 4 5 這樣就排好了,移動了2個元素。給出乙個1 n的排列,輸出完成排...