Submission #1319468

#TimeUsernameProblemLanguageResultExecution timeMemory
1319468simona1230Feast (NOI19_feast)C++20
18 / 100
85 ms12144 KiB
#include <bits/stdc++.h>

using namespace std;
long long n,k,a[300001];
void read()
{
    cin>>n>>k;
    for(long long i=1;i<=n;i++)
        cin>>a[i];
}

pair<long long,long long> dp[300001][2];

pair<long long,long long> group(long long x)
{
    dp[1][0]={0,0};
    dp[1][1]={a[1]-x,1};

    for(long long i=2;i<=n;i++)
    {
        dp[i][0]=max(dp[i-1][0],dp[i-1][1]);
        pair<long long,long long> p1={dp[i-1][0].first+a[i]-x,dp[i-1][0].second+1},
                        p2={dp[i-1][1].first+a[i],dp[i-1][1].second};
        dp[i][1]=max(p1,p2);

        //cout<<dp[i][0].first<<" "<<dp[i][1].first<<" "<<dp[i][1].second<<" "<<dp[i][0].second<<endl;
    }

    return max(dp[n][0],dp[n][1]);
}

void solve()
{
    long long ans=0;
    long long l=0,r=1e18;
    while(l<=r)
    {
        long long m=(l+r)/2;
        pair<long long,long long> g=group(m);

        if(g.second>=k)
        {
            //cout<<"in "<<m<<" "<<g.first<<" "<<g.second<<endl;
            ans=g.first+m*k;
            l=m+1;
        }
        else r=m-1;
    }

    cout<<ans<<endl;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	read();
	solve();
	return 0;
}
/*
10 4
2 0 1 1 0 1 1 1 1 1
*/
#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...