代码如下 提交记录
#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;
}