60分,不是超时或超空间问题
#include<cstdio>
#include<cmath>
#include<algorithm>
#define int long long
using namespace std;
int n,p,num[1000005];
int ans=-1000000009,pts[1000005],val[1000005][2];
void init(){
scanf("%lld%lld",&n,&p);
for(int i=1;i<=n;i++){
scanf("%lld",&num[i]);
}
}
void solveval(){
val[1][1]=num[1];
val[1][0]=0;
for(int i=2;i<=n;i++){
val[i][0]=max(val[i-1][0],val[i-1][1]);
val[i][1]=max(val[i-1][1]+num[i],num[i]);
}
}
void solvepts(){
pts[1]=val[1][1];
for(int i=2;i<=n;i++){
pts[i]=max(pts[i-1],max(val[i-1][1],val[i-1][0])+pts[i-1]);
}
}
void output(){
for(int i=1;i<=n;i++){
ans=max(ans,pts[i]);
}
if(ans<0) printf("-");
printf("%lld",abs(ans)%p);
}
signed main(){
init();
solveval();
solvepts();
output();
return 0;
}
感谢各位dalao!!!