Submission #990115

#TimeUsernameProblemLanguageResultExecution timeMemory
990115tch1cherinBigger segments (IZhO19_segments)C++17
100 / 100
53 ms17028 KiB
#include <bits/stdc++.h> using namespace std; int main() { cin.tie(nullptr)->sync_with_stdio(false); int N; cin >> N; vector<int> a(N); for (int &value : a) { cin >> value; } vector<long long> pref(N + 1); for (int i = 0; i < N; i++) { pref[i + 1] = pref[i] + a[i]; } vector<long long> dp(N + 1); vector<int> opt(N + 1); deque<int> opt_cur, opt_old; for (int i = 1; i <= N; i++) { while (opt_cur.size() > 1 && dp[opt_cur[1]] + pref[opt_cur[1]] <= pref[i]) { opt_cur.pop_front(); } while (opt_old.size() > 1 && dp[opt_old[1]] + pref[opt_old[1]] <= pref[i]) { opt_old.pop_front(); } if (dp[opt_cur[0]] + pref[opt_cur[0]] <= pref[i]) { opt[i] = opt[i - 1] + 1; dp[i] = pref[i] - pref[opt_cur[0]]; opt_old = opt_cur; opt_cur = {}; } else { opt[i] = opt[i - 1]; dp[i] = pref[i] - pref[opt_old[0]]; } while (!opt_cur.empty() && dp[opt_cur.back()] + pref[opt_cur.back()] > dp[i] + pref[i]) { opt_cur.pop_back(); } opt_cur.push_back(i); } cout << opt.back() << "\n"; }
#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...