码迷,mamicode.com
首页 > 其他好文 > 详细

Drop Voicing【LIS】

时间:2020-07-26 02:00:01      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:lis   name   http   coder   枚举   else   https   pac   ace   

题目链接:https://ac.nowcoder.com/acm/contest/5670/D

分析:

将整个数组放在一个圆上去看,可以发现,\(Invert\) 操作只相当于把圆旋转了一个单位,而数字之间的相对位置并没有发生变化,并不会有影响排序的进行。因此要想排序,只有依靠 \(Drop-2\) 操作。对于该操作,相当于把当前的数移动到圆环上按顺时针的第二位置,即改变了相邻俩个数的相对位置。最少的移动次数就是最少的不在有序列中的数的个数,可以通过枚举序列的起点来求 \(LIS\)。其它的通过旋转来调整即可。

代码:

#include <bits/stdc++.h>

using namespace std;
const int N=510;
int a[N],d[N];
int main()
{
    int n,ans=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
    {
        int cnt=1,p=1;
        d[p]=a[i];
        while(++cnt<=n)
        {
            int t=i+cnt-1;
            if(t>n) t%=n;
            if(d[p]<=a[t]) d[++p]=a[t];
            else
            {
                int x=lower_bound(d+1,d+1+p,a[t])-d;
                d[x]=a[t];
            }
        }
        ans=max(ans,p);
    }
    printf("%d\n",n-ans);
    return 0;
}

Drop Voicing【LIS】

标签:lis   name   http   coder   枚举   else   https   pac   ace   

原文地址:https://www.cnblogs.com/1024-xzx/p/13378417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!