D.Drop Voicing(LIS)

D.Drop Voicing(LIS)

思路: L I S LIS .

比赛的时候没在想出来,事实上操作2就相当于在环上改变相对顺序,也就是题解所说的指针,然后操作1就是可以改变指针所指元素的位置。题目可以在看成在一个环上操作,要使操作1最少,我们考虑枚举起点(也就是指针指向的初始位置),然后肯定要选取最长递增子序列作为开始,这样剩下要调整的数是最少的。然后就是 L I S LIS 板子了。

时间复杂度: O ( n 2 l o g n ) O(n^2logn)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
#define pb push_back
int a[N],d[N],ans;
int main(){
    int n;
    scanf("%d",&n);ans=n;
    for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i+n]=a[i];
    for(int i=1;i<=n;i++){
        int cnt=0;
        for(int j=i;j<i+n;j++){
            if(a[j]>d[cnt]) d[++cnt]=a[j];
            else {
            int p=lower_bound(d+1,d+cnt+1,a[j])-d;
               d[p]=a[j];
            }
        }
        ans=min(ans,n-cnt);
    }
    printf("%d\n",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/107582559
lis
今日推荐