特殊的排序 51Nod
阿新 • • 發佈:2018-12-12
一開始感覺有很多數是不用動的 原本就有序的那些數就不用動了 且最多就是n-1次 就求LIS WA。。
看了這樣一個樣例
9
6 1 2 3 4 5 7 8 9 這才發現 不用動的必須是一個連續遞增序列 因為如果一段連續遞增序列中間缺了一個數分成了兩段 必然要在插入缺數時犧牲一邊 所以從所有連續遞增序列中選一個最長的 n減長度就好
#include <bits/stdc++.h> using namespace std; const int maxn=5e4+10; int ary[maxn],dp[maxn]; int n; int main() { int i,ans; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&ary[i]); ans=0; for(i=1;i<=n;i++) { dp[ary[i]]=dp[ary[i]-1]+1; ans=max(ans,dp[ary[i]]); } printf("%d\n",n-ans); return 0; }