Submission #240565

#TimeUsernameProblemLanguageResultExecution timeMemory
240565arnold518Feast (NOI19_feast)C++14
100 / 100
175 ms15224 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const int MAXN = 3e5;
const ll INF = 1e13;

int N, K;
ll A[MAXN+10];

pll dp1[MAXN+10], dp2[MAXN+10];
ll ans;

int solve(ll lambda)
{
	int i, j;

	dp1[0]={-INF, 0};
	dp2[0]={0, 0};
	for(i=1; i<=N; i++)
	{
		if(dp1[i-1].first>dp2[i-1].first-lambda) dp1[i]={dp1[i-1].first+A[i]*2, dp1[i-1].second};
		else dp1[i]={dp2[i-1].first-lambda+A[i]*2, dp2[i-1].second+1};
		dp2[i]=max(dp1[i-1], dp2[i-1]);
	}
	ans=max(dp1[N].first, dp2[N].first);
	if(dp1[N].first>dp2[N].first) return dp1[N].second;
	else return dp2[N].second;
}

int main()
{
	int i, j;

	scanf("%d%d", &N, &K);
	for(i=1; i<=N; i++) scanf("%lld", &A[i]);

	ll lo=0, hi=INF;
	while(lo+1<hi)
	{
		ll mid=lo+hi>>1;
		if(solve(mid*2+1)>=K) lo=mid;
		else hi=mid;
	}
	solve(lo*2);
	printf("%lld\n", ans/2+lo*K);
}

Compilation message (stderr)

feast.cpp: In function 'int solve(ll)':
feast.cpp:19:9: warning: unused variable 'j' [-Wunused-variable]
  int i, j;
         ^
feast.cpp: In function 'int main()':
feast.cpp:44:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   ll mid=lo+hi>>1;
          ~~^~~
feast.cpp:36:9: warning: unused variable 'j' [-Wunused-variable]
  int i, j;
         ^
feast.cpp:38:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &N, &K);
  ~~~~~^~~~~~~~~~~~~~~~
feast.cpp:39:27: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(i=1; i<=N; i++) scanf("%lld", &A[i]);
                      ~~~~~^~~~~~~~~~~~~~~
#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...