显示代码纯文本
#include<fstream>
using namespace std;
ifstream fi("egroup.in");
ofstream fo("egroup.out");
int n,a[30001]={0},d[30001]={0},a1[30001]={0},d1[30001]={0};
int find(int x,int l,int r)
{
if(l==r)
{
return r;
}
int m=(l+r)/2;
if(x>=d[m])
{
return find(x,m+1,r);
}
if(x<d[m])
{
return find(x,l,m);
}
}
int find1(int x,int l,int r)
{
if(l==r)
{
return r;
}
int m=(l+r)/2;
if(x>=d1[m])
{
return find1(x,m+1,r);
}
if(x<d1[m])
{
return find1(x,l,m);
}
}
int main()
{
int ans,i,t,ans1;
fi>>n;
for(i=1;i<=n;i++)
{
fi>>a[i];
a1[n-i+1]=a[i];
d[i]=999999;
d1[i]=999999;
}
d[1]=a[1];
ans=1;
for(i=2;i<=n;i++)
{
t=find(a[i],1,n);
d[t]=min(a[i],d[t]);
ans=max(ans,t);
}
d1[1]=a1[1];
ans1=1;
for(i=2;i<=n;i++)
{
t=find1(a1[i],1,n);
d1[t]=min(a1[i],d1[t]);
ans1=max(ans1,t);
}
fo<<n-max(ans,ans1);
return 0;
}