// O(n^2) のTLE解を X 個だけ持って、O(NX) にした WA 解 #include using namespace std; int solve() { int n; cin >> n; vector A(n); for (int i = 0; i < n; i++) cin >> A[i]; vector> q1, q2; auto &cur = q1; auto &nex = q2; cur.emplace_back(0, 0); const int X = 1000; for (int i = 0; i < n; i++) { for (auto cl : cur) { if (nex.size() > X) break; int c = cl.first; int l = cl.second; if (l < A[i]) { nex.emplace_back(c, A[i]); } nex.emplace_back(c + 1, l + 1); } swap(cur, nex); nex.clear(); } return min_element(cur.begin(), cur.end())->first; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << solve() << endl; return 0; }