维护好每个人左右两边的最长单调子序列长度即可
时间复杂度是 n^2
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 2e5 + 5; int __t = 1, n; void solve() { cin >> n; vector<int> h(n); for (int i = 0; i < n; i++) cin >> h[i]; vector<int> inc(n, 1); for (int i = 0; i < n; i++) { for (int j = 0; j < i; j++) { if (h[j] < h[i] && inc[j] + 1 > inc[i]) { inc[i] = inc[j] + 1; } } } vector<int> dec(n, 1); for (int i = n - 1; i >= 0; i--) { for (int j = n - 1; j > i; j--) { if (h[j] < h[i] && dec[j] + 1 > dec[i]) { dec[i] = dec[j] + 1; } } } int ma = 0; for (int i = 0; i < n; i++) { ma = max(ma, inc[i] + dec[i] - 1); } cout << n - ma << "\n"; } int32_t main() { #ifdef ONLINE_JUDGE ios::sync_with_stdio(false); cin.tie(0); #endif // cin >> __t; while (__t--) solve(); return 0; }