제출 #174338

#제출 시각아이디문제언어결과실행 시간메모리
174338emil_physmathMoney (IZhO17_money)C++17
45 / 100
1597 ms65920 KiB
#include <algorithm> #include <iostream> #include <vector> #include <string> #include <set> using namespace std; typedef unsigned int uint; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; vector<int> a(n), upto(n); // sorted upto for (int i = 0; i < n; ++i) cin >> a[i]; upto[n - 1] = n - 1; for (int i = n - 2; i >= 0; --i) upto[i] = (a[i] <= a[i + 1] ? upto[i + 1] : i); set<int> x; vector<int> dp(n, n); for (int i = 0; i < n; ++i) { auto it = x.upper_bound(a[i]); int r; if (it == x.end()) r = upto[i]; else r = prev(upper_bound(a.begin() + i, a.begin() + upto[i] + 1, *it)) - a.begin(); dp[r] = min(dp[r], (i ? dp[i - 1] : 0) + 1); x.insert(a[i]); } cout << dp[n - 1]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...