直接贴代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<bits/stdc++.h>
using namespace std;
struct Node{
int number;//number:数字
int chttc;//chttc:特征值
int score;//score: 分数
}children[1000050];
int n,p;
int main(){;
scanf("%d%d",&n,&p);
scanf("%d",&children[1].number);
children[1].chttc=children[1].number;
int flag=1;
for(int i=2;i<=n;i++){
scanf("%d",&children[i].number);
children[i].chttc+=children[i-1].chttc;
if(children[i].number>0){
children[i].chttc+=children[i].number;
flag=i;
}
else
children[i].chttc=children[flag].chttc;
}
int MAX=children[1].chttc;
children[1].score=children[1].chttc;
children[2].score=children[1].score+children[1].chttc;
int Maxx=children[2].score;
if(children[2].score>MAX)
MAX=children[2].score;
if(MAX<Maxx)
MAX=Maxx;
for(int i=3;i<=n;i++){
if((children[i-1].score+children[i-1].chttc)%p>Maxx)
Maxx=(children[i-1].score+children[i-1].chttc)%p;
if(MAX<Maxx)
MAX=Maxx%p;
children[i].score=Maxx;
}
printf("%d",MAX%p);
return 0;
}