题解:P9982 [USACO23DEC] Haybale Distribution G
Motonic_queues · · 题解
题目大意
数轴上有
思路分析
简单数学题。
假设我们现在第
而这个值是答案在整数域上的“微分”,因此,当它从负变成正时,答案可以取到最值。
令
因为
因为从第
计算答案则用前缀和优化一下即可。
时间复杂度
Talk is cheap,show me the code
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int n,q,x[N],sum[N][2];
signed main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>x[i];
sort(x+1,x+n+1);
for(int i=1;i<=n;i++)sum[i][0]=sum[i-1][0]+x[n]-x[i]+1;
for(int i=n;i>=1;i--)sum[i][1]=sum[i+1][1]+x[i]-x[1]+1;
cin>>q;
while(q--){
int a,b;
cin>>a>>b;
int p=b*n/(a+b)+1;
cout<<(sum[p][0]-p*(x[n]-x[p]+1))*a+(sum[p][1]-(n-p+1)*(x[p]-x[1]+1))*b<<'\n';
}
return 0;
}