#include <bits/stdc++.h>
using ll = long long;
using namespace std;
const int N = 5e4 + 10;
int dp[N], a[N], b[N], cnt;
int find(int x)
{
int l = 1, r = cnt;
while(l < r)
{
int mid = (l + r) >> 1;
if(dp[mid] <= x)//第一个小于等于x的数
r = mid;
else
l = mid + 1;
}
return l;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int x, n = 1;
while(cin >> x)
{
a[n++] = x;
}
dp[1] = a[1];
cnt = 1;
int ans = 1;
for(int i = 2; i < n; i++)
{
if(a[i] <= dp[cnt])
dp[++cnt] = a[i];
else
{
int j = find(a[i]);
//cout << dp[j] << " ";
dp[j] = a[i];
}
}
cout << cnt << "\n";
cnt = 1;
b[1] = a[1];
for(int i = 2; i < n; i++)
{
int l = 1, r = cnt;
while(l < r)
{
int mid = (l + r) >> 1;
if(b[mid] >= a[i])//第一个比a[i]大的
r = mid;
else
l = mid + 1;
}
if(b[l] >= a[i])
b[l] = a[i];
else
b[++cnt] = a[i], ans++;
}
cout << ans;
return 0;
}
只过了两个测试点(第二问貌似没问题, 主要是第一问)