#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<cmath>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<unordered_map>
#include<unordered_set>
using namespace std;
using ll = long long;
ll mod = 998244353;
ll gcd(ll a, ll b) {
if (b == 0)return a;
else return gcd(b, a % b);
}
void solve() {
ll n; cin >> n;
vector<ll>v(n), pref(n);
for (ll i = 0; i < n; i++) {
cin >> v[i];
}
pref[0] = v[0];
for (ll i = 1; i < n; i++) {
pref[i] = pref[i - 1] + v[i];
}
vector<ll> dp(n);
vector<ll>mx(n + 1, -1);
for (ll i = 0; i < n; i++) {
if (i)mx[i] = max(mx[i], mx[i - 1]);
if (mx[i] != -1) {
dp[i] = dp[mx[i]] + 1;
ll ind = lower_bound(pref.begin(), pref.end(), pref[i] + pref[i] - pref[mx[i]]) - pref.begin();
mx[ind] = max(mx[ind], i);
}
else {
dp[i] = 1;
ll ind = lower_bound(pref.begin(), pref.end(), pref[i] + pref[i]) - pref.begin();
mx[ind] = max(mx[ind], i);
}
}
cout << dp[n-1] << endl;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
cout.tie(nullptr);
ll t = 1;
//cin >> t;
while (t--) {
solve();
}
}
| # | 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... |