LIS的简化版。
#include<iostream>
using namespace std;
const int N=30005;
int n;
int data[N];
int stack[N];
int sp;
inline void insert(int dat)
{
int head=1,tail=sp-1;
int mid;
while(head<tail)
{
mid=(head+tail)/2;
if(stack[mid]<=dat)
{
head=mid+1;
}
else
{
tail=mid;
}
}
stack[head]=dat;
}
void solve()
{
sp=1;
for(int i=1;i<=n;i++)
{
if(data[i]>=stack[sp-1])
{
stack[sp++]=data[i];
}
else
{
insert(data[i]);
}
}
int ans=sp-1;
sp=1;
for(int i=n;i>=1;i--)
{
if(data[i]>=stack[sp-1])
{
stack[sp++]=data[i];
}
else
{
insert(data[i]);
}
}
if(ans>sp-1)
printf("%d\n",n-ans);
else
printf("%d\n",n-sp+1);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&data[i]);
}
solve();
return 0;
}