链接:https://ac.nowcoder.com/acm/contest/5670/D
来源:牛客网

题意:

给你一个长度为n的数列,有两种操作,1.Drop-2,把倒数第二个数往前移,其余整体后移,2.Invert,把最后一个数往前移,其余整体后移。两种操作,连续做某种操作,当作一次,问你最少要进行多少次连续操作,使这个序列有序上升
##solution:
寻找以任意一个数为起点的最长上升子序列

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
int n,a[505],c[505],maxn=0;
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    for(int i=0;i<n;i++)
    {
        memset(c,INF,sizeof(c));
        for(int j=0;j<n;j++)
        {
            *lower_bound(c,c+n,a[(i+j)%n])=a[(i+j)%n];
        }
        maxn=max(maxn,(int)(lower_bound(c,c+n,INF)-c));
    }
    cout<<n-maxn;
}