Submission #1290652

#TimeUsernameProblemLanguageResultExecution timeMemory
1290652thuy_k31Feast (NOI19_feast)C++20
0 / 100
63 ms5088 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long
#define all(v) v.begin(), v.end()
const int N = 1e6 + 9;
const int MOD = 1e9 + 7;
const long long INF = 1e18;

int n, k;
int a[N];
long long pref[N];
pair <long long, long long> dp[2];
pair <long long, long long> cal (long long val)
{
    dp[1] = {0, 0};
    dp[0] = {-INF, -INF};

    for (int i = 1; i <= n; ++i) {
        dp[0] = max(dp[0], {dp[1].first - pref[i - 1] - val, dp[1].second});

        dp[1] = max(dp[1], {dp[0].first + pref[i], dp[0].second - 1});

    }
    return dp[1];
}
signed main()
{
    #define task "task"
    if (fopen(task".inp","r"))
    {
        freopen (task".inp","r",stdin);
        freopen (task".out","w",stdout);
    }
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin >> n >> k;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        pref[i] = pref[i - 1] + a[i];
    }
    long long lo = -1e15 - 3, hi = 1e15 + 3;
    long long ans = -INF;
    long long pos = 0;
    while (lo <= hi) {
        long long mid = (lo + hi) >> 1;
        pair <long long, long long> cur = cal(mid);
        if (-cur.second <= k) {
            hi = mid - 1;
            ans = max(ans, cur.first + k * mid);
        }
        else lo = mid + 1;
    }
    cout << ans;
}
/**

**/

Compilation message (stderr)

feast.cpp: In function 'int main()':
feast.cpp:33:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   33 |         freopen (task".inp","r",stdin);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
feast.cpp:34:17: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |         freopen (task".out","w",stdout);
      |         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...