#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 + 1);
for (int i = 1; i <= n; i++ ) {
cin >> a[i];
}
vector<int64_t> p(n + 1);
for (int i = 1; i <= n; i++) {
p[i] = p[i - 1] + a[i];
}
vector<array<int64_t, 2>> dp(n + 1);
dp[1] = {1, a[1]};
for (int i = 1; i <= n; i++) {
int l = i, r = n + 1;
while (l + 1 < r) {
int m = (l + r) / 2;
if (p[m] - p[i] >= dp[i][1]) {
r = m;
}
else {
l = m;
}
}
if (r != n + 1) {
if (dp[i][0] + 1 > dp[r][0]) {
dp[r][0] = dp[i][0] + 1;
dp[r][1] = p[r] - p[i];
}
else if (dp[i][0] + 1 == dp[r][0]) {
dp[r][1] = min(dp[r][1], p[r] - p[i]);
}
}
}
int64_t res = 0;
for (int i = 1; i <= n; i++) {
res = max(res, dp[i][0]);
}
cout << res << '\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... |