其他分享
首页 > 其他分享> > #贪心#CF605A Sorting Railway Cars

#贪心#CF605A Sorting Railway Cars

作者:互联网

题目

一个长度为 \(n\) 的排列,每次可以将一个数移至开头或者结尾,问最少多少次使其升序排列


分析

让数字连续的情况尽量多才能让移出来的次数尽量少,

找到最长的数字连续段,若其长度为 \(len\),那么答案为 \(n-len\)


代码

#include <cstdio>
#include <cctype>
using namespace std;
int n,ans,las[100011],f[100011];
int iut(){
	int ans=0; char c=getchar();
	while (!isdigit(c)) c=getchar();
	while (isdigit(c)) ans=ans*10+c-48,c=getchar();
	return ans;
}
int max(int a,int b){return a>b?a:b;}
int main(){
	n=iut();
	for (int i=1;i<=n;++i){
		int x=iut();
		if (las[x-1]) f[i]=f[las[x-1]]+1;
		    else f[i]=1;
		ans=max(ans,f[i]),las[x]=i;
	}
	return !printf("%d",n-ans);
}

标签:Sorting,int,Cars,100011,ans,isdigit,Railway,iut,getchar
来源: https://www.cnblogs.com/Spare-No-Effort/p/15906163.html