#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
const int N = 500500;
int n;
int a[N];
long long s[N];
int d[N];
vector<pair<long long, int>> v[N];
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
s[i] = s[i - 1] + a[i];
}
v[0].push_back({0, 0});
for (int i = 1; i <= n; i++) {
d[i] = d[i - 1];
if (s[i] >= v[d[i]][0].first) {
d[i] = d[i - 1] + 1;
}
int j = lower_bound(v[d[i] - 1].begin(), v[d[i] - 1].end(), make_pair(s[i] + 1, 0)) - v[d[i] - 1].begin() - 1;
j = v[d[i] - 1][j].second;
assert (v[d[i]].empty() || 2 * s[i] - s[j] >= v[d[i]].back().first);
v[d[i]].push_back({2 * s[i] - s[j], i});
}
cout << d[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... |