特殊的排序 51Nod 1241

2021-08-11 14:16:52 字數 1029 閱讀 4611

1241 特殊的排序

基準時間限制:1 秒 空間限制:131072 kb 分值: 80 

難度:5級演算法題

乙個陣列的元素為1至n的整數,現在要對這個陣列進行排序,在排序時只能將元素放在陣列的頭部或尾部,問至少需要移動多少個數字,才能完成整個排序過程?

例如:2 5 3 4 1 將1移到頭部 => 

1 2 5 3 4 將5移到尾部 =>

1 2 3 4 5 這樣就排好了,移動了2個元素。

給出乙個1-n的排列,輸出完成排序所需的最少移動次數。

input

第1行:1個數n(2 <= n <= 50000)。

第2 - n + 1行:每行1個數,對應排列中的元素。

output

輸出1個數,對應所需的最少移動次數。
input示例

525

341

output示例

2

此題只需求出最長遞增子串行的長度,然後剩下的都是需要移動的,即(n-最長遞增子串行的長度),但需要特別注意,用的不是最長遞增子串行的演算法,因為此題的意思是連續的,即兩位數的值只能相差為1;

例如  :   3 1 2 4 5 6

它在此題中求得最長遞增子串行長度應該是(每個數相差為1!)且連續遞增;

即應為    3 4 5 6  而不是1 2 4 5 6

#include#include#includeusing namespace std;

int a[50010],f[50010];

int main()

{ int n,i;

scanf("%d",&n);

for(i=0; i

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的排列,輸出完成排...