CSP-J T2 90pts
  • 板块学术版
  • 楼主Alexandr
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/27 21:26
  • 上次更新2023/10/27 22:07:10
查看原帖
CSP-J T2 90pts
475532
Alexandr楼主2023/10/27 21:26
#include<bits/stdc++.h>
#define _rep(i,a,b) for(int i=(a);i<=(b);i++)
#define _antirep(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
typedef long long lxl; 
const int N=1e5+5,mod=998244353; 
lxl n,d,v[N],a[N]; 
lxl ans;
int main()
{           
	scanf("%lld%lld",&n,&d);
	_rep(i,2,n) scanf("%lld",v+i);
	_rep(i,2,n) v[i]+=v[i-1];
	_rep(i,1,n) scanf("%lld",a+i); 
	int i=1,j=1;
	lxl lsts=0;
	while(i<n)
	{
		while(a[i]<=a[j]&&j<n) j++;
		lxl lucheng=v[j]-v[i];
		lxl l=0,r=lucheng+1,mid;
		while(l+1<r)
		{
			mid=l+r>>1;
			if(1ll*mid*d+lsts>=lucheng) r=mid;
			else l=mid;
		}
		//cout<<i<<"to"<<j<<" "<<v[j]-v[i]<<" "<<r<<endl;
		ans+=r*a[i];
		lsts=r*d+lsts-lucheng; 
		i=j;
	} 
	printf("%lld",ans);
    return 0;
}
2023/10/27 21:26
加载中...