#include <bits/stdc++.h> using namespace std; // 严格递增 LIS int LIS_strict(const vector<int>& a) { vector<int> tail; for (int x : a) { auto it = lower_bound(tail.begin(), tail.end(), x); // 第一个 >= x if (it == tail.end()) tail.push_back(x); else *it = x; } return (int)tail.size(); } // 非增 LNIS :等价于对 -a 求“非降”LNDS(用 upper_bound) int LNIS(const vector<int>& a) { vector<int> tail; // 存放 -a 的最小结尾 for (int x : a) { int y = -x; auto it = upper_bound(tail.begin(), tail.end(), y); // 第一个 > y if (it == tail.end()) tail.push_back(y); else *it = y; } return (int)tail.size(); } int main() { int n; cin >> n; vector<int> h(n); for (int i = 0; i < n; ++i) cin >> h[i]; cout << LNIS(h) << '\n' // 一套系统最多拦截 << LIS_strict(h) << '\n'; // 最少需要的系统数 return 0; }