zoukankan      html  css  js  c++  java
  • 51nod 1241 特殊的排序

    【题解】  

      设满足前后两个元素之差为1的最长上升子序列LIS的长度为m,那么本题的答案即为n-m.

      证明:

      1,n-m次移动一定可以让序列递增。设LIS的第一个数为i,最后一个数为j,我们按照i-1到1的递减的顺序把这些数调换到第一个位置,它们就排好序了。同理处理j+1到n. 总共需要n-m次移动。

      2,不存在小于n-m次的移动方法。因为如果只需移动k次,k<n-m,那么剩下的n-k个数组成了一个更长的LIS(n-k>m),于LIS的长度为m矛盾。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #define LL long long
     5 #define rg register
     6 #define N 200010
     7 using namespace std;
     8 int n,m,ans,a[N],f[N];
     9 inline int read(){
    10     int k=0,f=1; char c=getchar();
    11     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
    12     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
    13     return k*f;
    14 }
    15 int main(){
    16     n=read();
    17     for(rg int i=1;i<=n;i++) a[i]=read();
    18     for(rg int i=1;i<=n;i++) f[a[i]]+=f[a[i]-1]+1,ans=max(ans,f[a[i]]);
    19 //    printf("%d
    ",ans);
    20 //    for(rg int i=1;i<=n;i++) printf("%d ",f[a[i]]); puts("");
    21     printf("%d
    ",n-ans);
    22     return 0;
    23 }
    View Code
  • 相关阅读:
    SpringBoot整合系列-整合H2
    SpringBoot整合系列-整合Swagger2
    BZOJ3626 [LNOI2014]LCA
    BZOJ4475 [Jsoi2015]子集选取
    BZOJ4466 [Jsoi2013]超立方体
    BZOJ3997 [TJOI2015]组合数学
    BZOJ3996 [TJOI2015]线性代数
    BZOJ2227 [Zjoi2011]看电影(movie)
    BZOJ2337 [HNOI2011]XOR和路径
    BZOJ2330 [SCOI2011]糖果
  • 原文地址:https://www.cnblogs.com/DriverLao/p/9594632.html
Copyright © 2011-2022 走看看