萌新妹子刚学OI,斜率优化板子0pts求助
查看原帖
萌新妹子刚学OI,斜率优化板子0pts求助
556545
_anll_楼主2024/5/10 09:30

rt,样例过了,提交 0pts,实在看不出来了,跪求大佬捞捞QAQ

#include<iostream>
#define int long long
using namespace std;
const int N=300005;
int n,s,t[N],f[N],dp[N],que[N];
int Y(int i,int j){
	return (dp[j]-s*f[j])-(dp[i]-s*f[i]);
}
int X(int i,int j){
	return (f[j]-f[i]);
}
bool check(int x,int y){
	return Y(que[x],que[x+1])>X(que[x],que[x+1])*y;
}
int Mid(int l,int r,int x){
	int mid,an=-1;
	while(l<r){
		mid=(l+r)/2;
		if(check(mid,x)) an=mid,r=mid-1;
		else l=mid+1;
	}
	if(an==-1) return r;
	return an;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n>>s;
	for(int i=1;i<=n;i++){
		cin>>t[i]>>f[i];
		t[i]+=t[i-1],f[i]+=f[i-1];
	}
	int l=1,r=0;que[++r]=0;
	for(int i=1;i<=n;i++){
		int j=que[Mid(l,r,t[i])];
		dp[i]=dp[j]+t[i]*(f[i]-f[j])+s*(f[n]-f[j]);
		while(l<r&&Y(que[r],que[r-1])*X(i,que[r])>=
				   X(que[r],que[r-1])*Y(i,que[r])) r-=1;
		que[++r]=i;
	}
	cout<<dp[n];
	return 0;
}
2024/5/10 09:30
加载中...