Submission #1266110

#TimeUsernameProblemLanguageResultExecution timeMemory
1266110rayan_bdBigger segments (IZhO19_segments)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mxN = 5e5 + 100;
int a[mxN], pref[mxN];
pair<int, int> dp[mxN];
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr); cout.tie(nullptr);

    int n;
    cin >> n;
    pref[0] = 0;
    for(int i = 1; i <= n; ++i){
        cin >> a[i];
        pref[i] = pref[i - 1] + a[i];
    }
    auto query = [&](int l, int r){
        return pref[r] - pref[l - 1];
    };
    auto _mrg = [&](int i, int j){
        if(dp[i].first == dp[j].first + 1) dp[i] = min(dp[i], {dp[j].first + 1, query(j + 1, i)});
        else dp[i] = min(dp[i], {dp[j].first + 1, query(j + 1, i)});
    };
    for(int i = 1; i <= n; ++i){
        dp[i] = dp[i - 1];
        dp[i].second += a[i];
        int st = 1, en = i;
        while(st <= en){
            int mid = st + (en - st) / 2;
            if(dp[mid - 1].second <= query(mid, i)){
                _mrg(i, mid - 1);
                st = mid + 1;
            }else{
                en = mid - 1;
            }
        }
    }
    cout << dp[n].first << "\n";

    return 0;
}
#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...