zoukankan      html  css  js  c++  java
  • 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;
    }
    
    
    
  • 相关阅读:
    GolandQuick编辑器快捷键
    GitStand
    高阶函数
    文本和字节序列
    元组用法
    映射的弹性键查询
    字典的setdefault()
    数组、内存视图、双向队列
    Python之random.seed()用法
    用bisect来管理已排序的序列
  • 原文地址:https://www.cnblogs.com/Tyher/p/9898565.html
Copyright © 2011-2022 走看看