Submission #1290882

#TimeUsernameProblemLanguageResultExecution timeMemory
1290882LmaoLmaoFeast (NOI19_feast)C++20
100 / 100
122 ms7548 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
#define name "a"
#define int long long
using namespace std;

using ii = pair<int,long long>;
using aa = array<int,3>;
using ll = long long;
const int N=5e5+5;
const int MOD=1e9+7;

int n,k;
ii dp[N];
int pre[N];

void solve(int delta) {
    int j=0;
    for(int i=1;i<=n;i++) {
        dp[i]={dp[j].fi+pre[i]-pre[j]-delta,dp[j].se+1};
        if(dp[i-1].fi>dp[i].fi) {
            dp[i]=dp[i-1];
        } else
        if(dp[i].fi==dp[i-1].fi) dp[i].se=min(dp[i].se,dp[i-1].se);
        if(dp[j].fi-pre[j]<dp[i].fi-pre[i]) {
            j=i;
        } else
        if(dp[j].fi-pre[j]==dp[i].fi-pre[i]) {
            if(dp[i].se<dp[j].se) j=i;
        }
    }
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    if(fopen(name".inp","r")) {
        freopen(name".inp","r",stdin);
        freopen(name".out","w",stdout);
    }
    cin >> n >> k;
    int ans=0;
    for(int i=1;i<=n;i++) {
        cin >> pre[i];
        pre[i]+=pre[i-1];
    }
    int l=0,r=1e15;
    while(l<=r) {
        int mid = l + r >> 1;
        solve(mid);
        if(dp[n].se<=k) {
            ans=max(ans,dp[n].fi+dp[n].se*mid);
            r=mid-1;
        }
        else {
            l=mid+1;
        }
    }
    //solve(1);
    cout << ans;
    return 0;
}

Compilation message (stderr)

feast.cpp: In function 'int main()':
feast.cpp:40:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |         freopen(name".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
feast.cpp:41:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |         freopen(name".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...