#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++){
opt[i] = opt[i-1];
dp[i] = dp[i-1];
if( a[i-1] >= opt[i-1] ) dp[i] = dp[i-1], opt[i] = a[i-1];
int l = 0, r = i-1, ch = 0;
while(l <= r){
int m = (l+r) >> 1;
if( dp[i] - dp[m] > 1)
l = m + 1;
else if( opt[m] > pr[i] - pr[m] )
r = m - 1;
else{
l = m + 1;
ch = m;
}
}
if( dp[i] < dp[ch] + 1){
dp[i] = dp[ch] + 1;
opt[i] = pr[i] - pr[ch];
}
if( dp[i] == dp[ch] + 1)
opt[i] = min( opt[i], pr[i] - pr[ch] );
}
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... |