luogu P3411 序列变换
Posted tyher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P3411 序列变换相关的知识,希望对你有一定的参考价值。
链接 P3411 序列变换
- 如果要最小化答案,那么就最大化不移动的数。
- 那么不移动的子序列一定是最后答案的一段连续区间,而移动的数我们是一定有办法把他们还原的。
- 设(f_{i})表示(i)点的最长长度,转移实际上是恒定的,即(f_{i}=f_{j}+1),其中(j)是(i)的前驱且唯一确定。
- 把(a)数组离散化后直接查值域即可,复杂度(O(nlogn))。
#include<bits/stdc++.h>
#define R register int
using namespace std;
const int N=1000001;
int n,Mx,ans,len,O[N],vis[N],f[N],w[N],T[N];
int gi(){
R x=0,k=1;char c=getchar();
while(c!=‘-‘&&(c<‘0‘||c>‘9‘))c=getchar();
if(c==‘-‘)k=-1,c=getchar();
while(c>=‘0‘&&c<=‘9‘)x=(x<<3)+(x<<1)+c-‘0‘,c=getchar();
return x*k;
}
int main(){
n=gi();
for(R i=1;i<=n;++i)w[i]=gi(),O[i]=w[i];
sort(O+1,O+n+1),len=unique(O+1,O+n+1)-O-1;
for(R i=1;i<=n;++i){
w[i]=lower_bound(O+1,O+len+1,w[i])-O;
if(!vis[w[i]])f[i]=T[w[i]-1]+1;
else f[i]=T[w[i]]+1;
vis[w[i]]=1,T[w[i]]=f[i],ans=max(ans,f[i]);
}
cout<<n-ans<<endl;
return 0;
}
以上是关于luogu P3411 序列变换的主要内容,如果未能解决你的问题,请参考以下文章
noip提高组2002 字串变换(luogu P1032 )