#include <bits/stdc++.h>
using namespace std;
signed main(){
int n; cin >> n;
vector<int> a(n);
for(int &i : a) cin >> i;
vector<int> pr{0};
for(int i : a) pr.push_back(pr.back() + i);
vector<int> dp (n + 1, 0), opt(n + 1, 0);
for(int i = 1; i <= n; i++) {
if(dp[i] < dp[i-1]) dp[i] = dp[i-1], opt[i] = opt[i-1];
if(dp[i] == dp[i-1]) opt[i] = max(opt[i-1], opt[i]);
int df = pr[i] * 2 - pr[opt[i]];
int l = i + 1, r = n, ans = i;
while(l <= r){
int m = (l + r) >> 1;
if(pr[m] < df) l = m + 1;
else {
ans = m;
r = m - 1;
}
}
if ( dp[ans] < dp[i] + 1) dp[ans] = dp[i] + 1, opt[ans] = i;
if ( dp[ans] == dp[i] + 1) opt[ans] = max(opt[ans], i);
}
cout << dp[n] << '\n';
};
# | 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... |