#include <iostream>
#include <algorithm>
using namespace std;
#define int long long
const int N = 1<<19;
int a[N], Sm[N], Mx[N], pre[N], n;
signed main(){
cin>>n;
for (int i=1;i<=n;i++)
cin>>a[i], pre[i] = pre[i-1] + a[i];
Mx[0] = 1;
for (int i=1;i<=n;i++){
if (Mx[i-1] > Mx[i])
Mx[i] = Mx[i-1], Sm[i] = Sm[i-1] + a[i];
int u = upper_bound(pre, pre + n + 1, pre[i] + Sm[i] - 1) - pre;
if (Mx[u] < Mx[i] + 1)
Mx[u] = Mx[i] + 1, Sm[u] = pre[u] - pre[i];
else if (Mx[u] == Mx[i] + 1)
Sm[u] = min(Sm[u], pre[u] - pre[i]);
}
cout<<Mx[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... |