Submission #1334844

#TimeUsernameProblemLanguageResultExecution timeMemory
1334844udynamoFeast (NOI19_feast)C++20
4 / 100
80 ms7392 KiB
// Author : Udynamo

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

typedef tree<int, null_type, std::less<int>, rb_tree_tag,
tree_order_statistics_node_update> pbds;

#define int long long
#define mk make_pair
#define ff first
#define ss second
#define pb push_back
#define vi vector<int>
#define vpi vector<pair<int,int>>
#define all(x) x.begin(),x.end()

using namespace std;

template<typename T>
istream& operator>>(istream &is, vector<T> &v) {
    for (auto &x : v) is >> x;
    return is;
}

const int INF = 1e18;

void UNsolve() {
    
    int n, kk; 
    cin >> n >> kk;

    vi a(n); 
    cin >> a;

    auto solve_lambda = [&](int lmb){

        vpi dp(n, {-INF, 0});

        dp[0] = max(mk(0LL,0LL), mk(a[0] + lmb,1LL));

        for(int i = 1; i < n; i++){
            auto [val, cnt] = dp[i - 1];

            dp[i] = max({
                dp[i - 1],
                mk(val + a[i], cnt),
                mk(a[i] + lmb, cnt + 1)
            });
        }

        return dp.back();
    };

    int l = 0, r = 1e9, ans = 0;

    while(l <= r){
        int mid = (l + r) >> 1;

        auto [val, cnt] = solve_lambda(mid);

        if(cnt >= kk){
            ans = mid;
            r = mid - 1;
        }else{
            l = mid + 1;
        }
    }

    auto [val, cnt] = solve_lambda(ans);

    cout << val - kk * ans << endl;
}

signed main() {

    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    UNsolve();

    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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...