社区讨论

求调喵!

P1484种树参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mhj0yfzq
此快照首次捕获于
2025/11/03 18:56
4 个月前
此快照最后确认于
2025/11/03 18:56
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N=300005,INF=2e6;

int n,k;
int val[N];

int ans,dp[N][2],g[N][2];
bool check(int delta) {
	memset(dp,0,sizeof(dp));
	memset(g,0,sizeof(g));
	
	for(int i=1;i<=n+1;++i) {
		dp[i][1]=dp[i-1][0]+val[i]+delta,g[i][1]=g[i-1][0]+1;
		if(make_pair(-dp[i-1][0],g[i-1][0]) < make_pair(-dp[i-1][1],g[i-1][1]))
			dp[i][0]=dp[i-1][0],g[i][0]=g[i-1][0];
		else
			dp[i][0]=dp[i-1][1],g[i][0]=g[i-1][1];
	}
	if(g[n+1][0]<=k) ans=max(ans,dp[n+1][0]-g[n+1][0]*delta);
	return g[n+1][0];
}

signed main() {
	cin >> n >> k;
	for(int i=1;i<=n;++i) cin >> val[i];
	
	int l=-INF,r=0,mid;
	while(l<=r) {
		mid=l+r>>1;
		if(check(mid)>k) r=mid-1;
		else l=mid+1;
	}
	
	cout << ans;
	
	return 0;
}

喵!后面忘了喵!

回复

4 条回复,欢迎继续交流。

正在加载回复...