Submission #862979

#TimeUsernameProblemLanguageResultExecution timeMemory
862979somethingnewBigger segments (IZhO19_segments)C++17
37 / 100
1548 ms5296 KiB
// ↘ ⬇ ⬇ ⬇ ⬇ ⬇ ↙ // ➡ @roadfromroi ⬅ // ↗ ⬆ ⬆ ⬆ ⬆ ⬆ ↖ #include <iostream> #include "vector" #include "algorithm" #include "numeric" #include "climits" #include "iomanip" #include "bitset" #include "cmath" #include "map" #include "deque" #include "array" #include "set" #define all(x) x.begin(), x.end() using namespace std; #define int long long void upd(pair<int, int> &a, pair<int, int> b) { if (a.first < b.first) a = b; if (a.first == b.first) a = min(a, b); } void solve() { int n; cin >> n; vector<int> a(n); vector<int> prf(n + 1); for (int i = 0; i < n; ++i) { cin >> a[i]; prf[i + 1] = prf[i] + a[i]; } vector<pair<int, int>> dp(n + 1, {-1e9, 0}); dp[0] = {0, 0}; set<array<int, 3>> st = {{0, 0,0}}; for (int i = 1; i <= n; ++i) { //cout << i << endl; int vl = prf[i]; for (auto j : st) { //cout << j[0] << ' ' << j[1] << ' ' << j[2] << '\n'; if (j[0] <= vl) upd(dp[i], {j[1] + 1, vl - j[2]}); } st.insert({dp[i].second + prf[i], dp[i].first, prf[i]}); } cout << dp[n].first << '\n'; } signed main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); int t = 1; while (t--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...