以下是80分代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1000005;
int a[N],dp[N],q[N],fs[N];
int n,mod,maxx,flag;
signed main(){
cin>>n>>mod;
for (int i=1;i<=n;i++){
cin>>a[i];
}
fs[1] = dp[1] = q[1] = a[1];
maxx = a[1];
for(int i=2;i<=n;i++){
dp[i] = max(dp[i-1]+a[i],a[i]);
q[i] = max(q[i-1],dp[i]);
}
fs[2] = fs[1]+a[1];
maxx = max(maxx,fs[2]);
for (int i=3;i<=n;i++){
if(fs[i-1]+q[i-1]<0 && fs[i-1]>0){
flag=1;
}
if(flag){
fs[i]=(fs[i-1]%mod+q[i-1]%mod)%mod;
}
fs[i] = max(fs[i-1],q[i-1]+fs[i-1]);
maxx = max(maxx, fs[i]);
}
if(flag==1){
cout<<fs[n]%mod<<endl;
}
else{
cout << maxx % mod << endl;
}
return 0;
}