Drop VoicingLIS
Posted 1024-xzx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Drop VoicingLIS相关的知识,希望对你有一定的参考价值。
题目链接: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-ans);
return 0;
}
以上是关于Drop VoicingLIS的主要内容,如果未能解决你的问题,请参考以下文章
Postgres 复合类型 drop cascade 仅删除依赖列
丢弃 child 会触发 parent 的“drop”事件侦听器。我想用特定于子的“drop”覆盖该事件侦听器