#include <bits/stdc++.h> using namespace std; long long n,p,a[1000100]; //f:存放特征值 long long f[1000100],score[1000100],r,ma = LONG_LONG_MIN;//r存放每个人的分数 long long i; bool pd; int main(){ cin>>n>>p; //读入n个值 for(i = 1;i <= n;i++){ cin>>a[i]; } //第一个人的特征值就是数字本身 f[1] = a[1]; //计算初步的特征 for(i = 2;i <= n;i++){ f[i] = max(f[i-1]+a[i],a[i]); } // for(i = 1;i <= n;i++){ // cout<<f[i]<<" "; // } // cout<<endl; //考虑对于每个特征值,可能不是最佳答案 for(i = 2;i <= n;i++){ f[i] = max(f[i],f[i-1]); } // for(i = 1;i <= n;i++){ // cout<<f[i]<<" "; // } // cout<<endl; //第一个人的分数是特征值 score[1] = f[1]; score[2] = f[1] + score[1]; ma = max(score[1],score[2]); for(i = 3;i <= n;i++){ if(f[i-1]>0){ score[i]=score[i-1]+f[i-1]; if(score[i] > score[1]){ pd = true; score[i] %= p; } }else{ score[i] = score[2]; } ma = max(ma,score[i]); } // for(i = 1;i <= n;i++){ // cout<<score[i]<<" "; // } // cout<<endl; // cout<<ma%p; if(pd) cout<<score[n]%p; else cout<<score[1]%p; cout<<endl; return 0; } /************************************************************** Problem: 1800 User: admin Language: C++ Result: Accepted Time:756 ms Memory:25512 kb ****************************************************************/