Wa 0 pts求调
查看原帖
Wa 0 pts求调
754310
Pepsee楼主2024/4/25 23:18

真不羁绊知道哪里有问题了,眼睛要瞎了,rt

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,s;
int sumt[500005],sumf[500005];
int f[500005],q[500005],head = 0,tail = 0;
int binary_search(int k)
{
	int l = head,r = tail,ans = tail;
	while (l <= r)
	{
		int mid = (l+r)>>1;
		if (f[q[mid+1]]-f[q[mid]] > k*(sumf[mid+1]-sumf[mid]))
			ans = mid,r = mid-1;
		else l = mid+1;
	}
	return q[ans];
}
signed main()
{
	cin >> n >> s;
	for (int i = 1,t,v; i <= n; i++)
	{
		cin >> t >> v;
		sumt[i] = sumt[i-1]+t;
		sumf[i] = sumf[i-1]+v;
	}
	for (int i = 1; i <= n; i++)
	{
		int pos = binary_search(sumt[i]+s);
		f[i] = f[pos]+sumt[i]*(sumf[i]-sumf[pos])+s*(sumf[n]-sumf[pos]);
		while (head < tail && (f[q[tail]]-f[q[tail-1]])*(sumf[i]-sumf[q[tail]]) >= (f[i]-f[q[tail]])*(sumf[q[tail]]-sumf[q[tail-1]]))
			tail--;
		q[++tail] = i;
	}
	cout << f[n];
	return 0;
}
2024/4/25 23:18
加载中...