https://www.luogu.com.cn/problem/P1982<=题目戳这
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long n,p,s[10000005],tz[10000005],fs[10000005],k[10000005],maxx=-2100000000,x,ans;
int main()
{
scanf("%lld%lld",&n,&p);
for(int i=1;i<=n;i++)
{
scanf("%lld",&x);//第i名小朋友的数字
if(s[i-1]>0)
s[i]=s[i-1]+x;
else
s[i]=x;
maxx=max(s[i],maxx);//DP求连续数之和的最大值
tz[i]=maxx%p;//第i名小朋友的特征值
}
maxx=-2100000000;
ans=fs[1]=tz[1];//第i名小朋友的分数
for(int i=2;i<=n;i++)
{
maxx=max(maxx,tz[i-1]+fs[i-1]);
fs[i]=maxx;
if(ans<maxx)
ans=maxx%p;
}
printf("%lld",ans);
return 0;
}