#include<bits/stdc++.h>
using namespace std;
int n;
long long p, a[1000010], f[1000010], spe[1000010], sco[1000010];
int main()
{
scanf("%d%d", &n, &p);
for(int i = 1; i <= n; i++)
{
cin >> a[i];
}
memset(f, 0x80, sizeof(f));
memset(spe, 0x80, sizeof(spe));
memset(sco, 0x80, sizeof(sco));
f[1] = a[1];
spe[1] = a[1];
for(int i = 2; i <= n; i++)
{
f[i] = max(f[i-1] + a[i], a[i]);
spe[i] = max(spe[i-1], f[i]);
}
sco[1] = spe[1];
sco[2] = spe[1] + sco[1];
/*23行是从40分到80分的关键,第二个分数也是确定的,不能放在循环里求,样例二就会出问题*/
for(int i = 3; i <= n; i++)
{
sco[i] = max(sco[i-1], sco[i-1] + spe[i-1]);
}
long long ans = max(sco[1], sco[n]);
if(ans < 0){ans = abs(ans) % p;cout << -1 * ans;}
else{cout << ans % p;}
}
求奆佬帮助