#include<iostream>
using namespace std;
const int N=1e3+10;
const int INF=0x3f3f3f3f;
int a[N],n;
int dp[N];
int u[N],cnt=1;
void add(int x)
{
int l=0,r=cnt;
while(l<r)
{
int mid=l+r>>1;
if(u[mid]>=x)
{
r=mid;
}
else
{
l=mid+1;
}
}
if(l==cnt)
{
u[cnt]=x;
u[++cnt]=INF;
}
u[l]=x;
}
int main()
{
int t;
while(cin>>t)
a[++n]=t;
for(int i=1;i<=n;i++)
{
dp[i]=1;
for(int j=1;j<i;j++)
{
if(a[j]>=a[i])
dp[i]=max(dp[i],dp[j]+1);
}
}
int ans=0;
for(int i=1;i<=n;i++)
ans=max(ans,dp[i]);
cout<<ans<<endl;
u[0]=-INF,u[1]=INF;
for(int i=1;i<=n;i++)
{
add(a[i]);
}
cout<<cnt-1<<endl;
}
AcWing 1010.拦截导弹
最新推荐文章于 2024-09-08 19:37:30 发布