Submission #883218

#TimeUsernameProblemLanguageResultExecution timeMemory
883218boris_mihovBigger segments (IZhO19_segments)C++17
37 / 100
1524 ms5464 KiB
#include <algorithm>
#include <iostream>
#include <numeric>
#include <cstring>
#include <vector>
#include <bitset>
#include <queue>
#include <set>

typedef long long llong;
const int MAXN = 500000 + 10;
const llong INF = 1e18;

int n;
int a[MAXN];
int dp[MAXN];
llong last[MAXN];

void solve()
{
    std::fill(last + 1, last + 1 + n, INF);
    last[0] = 0;

    for (int i = 0 ; i <= n ; ++i)
    {
        llong sum = 0;
        for (int j = i + 1 ; j <= n ; ++j)
        {
            sum += a[j];
            if (sum >= last[i])
            {
                if (dp[i] + 1 > dp[j] || (dp[i] + 1 == dp[j] && last[j] > sum))
                {
                    dp[j] = dp[i] + 1;
                    last[j] = sum;
                }
            }
        }
    }    

    std::cout << dp[n] << '\n';
}

void input()
{
    std::cin >> n;
    for (int i = 1 ; i <= n ; ++i)
    {
        std::cin >> a[i];
    }
}

void fastIOI()
{
    std::ios_base :: sync_with_stdio(0);
    std::cout.tie(nullptr);
    std::cin.tie(nullptr);
}

int main()
{
    fastIOI();
    input();
    solve();

    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...