Submission #1267161

#TimeUsernameProblemLanguageResultExecution timeMemory
1267161kawhietBigger segments (IZhO19_segments)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } vector<int64_t> p(n + 1); for (int i = 0; i < n; i++) { p[i + 1] = p[i] + a[i]; } vector<pair<int, int64_t>> dp(n + 1); dp[1] = {1, a[0]}; int tl = 1, mx = 0; for (int i = 2; i <= n; i++) { int l = tl - 1, r = i; while (l + 1 < r) { int m = (l + r) / 2; if (dp[m].second <= p[i] - p[m]) { l = m; } else { r = m; } } // if (i == 5) { // cout << l << '\n'; // cout << dp[l].second << '\n'; // cout << p[i] - p[l] << '\n'; // // for (int j = 1; j <= 4; j++) { // // cout << dp[j].first << ' ' << dp[j].second << '\n'; // // } // // cout << l << ' ' << r << '\n'; // } if (l != tl - 1) { dp[i] = {dp[l].first + 1, p[i] - p[l]}; if (dp[i].first > mx) { mx = dp[i].first; tl = i; } } else { dp[i] = {dp[i - 1].first, dp[i - 1].second + a[i - 1]}; } } // cout << '\n'; // for (int i = 1; i <= n; i++) { // cout << dp[i].first << ' ' << dp[i].second << '\n'; // } cout << dp[n].first << '\n'; return 0; }
#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...