제출 #566412

#제출 시각아이디문제언어결과실행 시간메모리
566412StickfishBigger segments (IZhO19_segments)C++17
100 / 100
273 ms14884 KiB
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using ll = long long;

const int MAXN = 5e5 + 123;
int a[MAXN];
ll psm_[MAXN];
ll* psm = psm_ + 1;
pair<int, int> dp[MAXN];

signed main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
        psm[i] = psm[i - 1] + a[i];
    }
    dp[0] = {1, -1};
    for (int i = 0; i < n; ++i) {
        if (i)
            dp[i] = max(dp[i], dp[i - 1]);
        // psm[nt] - psm[i] >= psm[i] - psm[pv]
        int nt = lower_bound(psm, psm + n, psm[i] * 2 - psm[dp[i].second]) - psm;
        pair<int, int> ndp = {dp[i].first + 1, i};
        if (nt < n && ndp > dp[nt])
            dp[nt] = ndp;
        //cout << dp[i].first << ' ' << dp[i].second << "(" << nt << ")" << endl;
    }
    cout << dp[n - 1].first;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...