球调斜优板梯玩具装箱
  • 板块灌水区
  • 楼主ty_mxzhn
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/11 20:59
  • 上次更新2024/7/11 22:43:57
查看原帖
球调斜优板梯玩具装箱
768195
ty_mxzhn楼主2024/7/11 20:59

0pts 过了样例

#include <bits/stdc++.h>
#define int long long
using namespace std;

int n,k,su[100007],dp[100007];
int q[100007],l=1,r=0;
__int128 X(int j){
	return su[j];
}
__int128 Y(int j){
	return dp[j]+(su[j]+k)*(su[j]+k);
}
signed main(){
	scanf("%lld%lld",&n,&k);
	k++;
	for(int i=1;i<=n;su[i]+=su[i-1]+1,i++){
		scanf("%lld",&su[i]);
		
	}
	q[++r]=0;
	for(int i=1;i<=n;i++){
		while(l<r&&Y(q[l+1])-Y(q[l])<(X(q[l+1])-X(q[l]))*2*su[i]) ++l;
		int j=q[l];
		dp[i]=dp[j]+(su[i]-su[j]-k)*(su[i]-su[j]-k);
		while(l<r&&(Y(q[r])-Y(q[r-1]))*(X(i)-X(q[r-1]))>=(Y(i)-Y(q[r-1]))*(X(q[r])-Y(q[r-1]))) --r;
		q[++r]=i;
	}
	printf("%lld\n",dp[n]);
	return 0;
}
2024/7/11 20:59
加载中...