제출 #590689

#제출 시각아이디문제언어결과실행 시간메모리
590689HanksburgerBigger segments (IZhO19_segments)C++17
100 / 100
81 ms20820 KiB
#include <bits/stdc++.h>
using namespace std;
long long a[500005], sum[500005];
pair<long long, long long> dp[500005];
bool cmp(pair<long long, long long> x, pair<long long, long long> y)
{
    if (x.first!=y.first)
        return x.first<y.first;
    return x.second>y.second;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    long long n;
    cin >> n;
    for (long long i=1; i<=n; i++)
    {
        cin >> a[i];
        sum[i]=sum[i-1]+a[i];
    }
    dp[1]={1, a[1]};
    for (long long i=1; i<=n; i++)
    {
        long long ind=lower_bound(sum+i+1, sum+n+1, dp[i].second+sum[i])-sum;
        if (ind<=n)
            dp[ind]=max(dp[ind], {dp[i].first+1, sum[ind]-sum[i]}, cmp);
        dp[i+1]=max(dp[i+1], {dp[i].first, dp[i].second+a[i+1]}, cmp);
    }
    cout << dp[n].first;
    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...