#include <bits/stdc++.h>
using namespace std;
#define int long long
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);
dp[1] = 1;
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+1;
while(l < r){
int m = (l + r) >> 1;
if(pr[m] < df) l = m + 1;
else r = m;
}
if ( dp[l] < dp[i] + 1) dp[l] = dp[i] + 1, opt[l] = i;
if ( dp[l] == dp[i] + 1) opt[l] = max(opt[l], i);
}
//for(int i = 0; i < n; i ++ )cout << dp[i] << ' ';
//cout << '\n';
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... |