#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |