70分求助……
查看原帖
70分求助……
338203
ljj0803楼主2023/7/7 11:20

代码如下 提交记录

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,p,a[1000005],s[1000005][5],f[1000005];
int N=1e18;
priority_queue<pair<pair<int,int> ,int> > q;
signed main()
{
	cin>>n>>p;
	for(register int i=1;i<=n;++i) cin>>a[i];
	memset(s,-2,sizeof(s));
	for(register int i=1;i<=n;++i)
	{
		s[i][1]=max(s[i][1],max(s[i-1][1]+a[i],a[i]));
		s[i][0]=max(s[i-1][0],s[i-1][1]);
	}
	for(register int i=1;i<=n;++i) f[i]=max(s[i][0],s[i][1]); 
	q.push(make_pair(make_pair(a[1]/N,a[1]%N),1));
//	for(register int i=1;i<=n;++i) cout<<f[i]<<" ";
//	cout<<endl;
	for(register int i=2;i<=n;++i) 
	{
//		cout<<q.top().first+f[q.top().second]<<endl;
		int aa=q.top().first.first,ab=q.top().first.second,bb=q.top().second;
		q.push(make_pair(make_pair(aa+(ab+f[bb])/N,ab+f[bb]%N),i));
	}
	cout<<(q.top().first.first%p*N%p+q.top().first.second%p)%p;
    return 0;
}
2023/7/7 11:20
加载中...