贴代码
#include<iostream>
using namespace std;
int n,p;
__int128 a[1000005],t[1000005],v[1000005],tmp,maxx=-1e18,ans=-1e18;
inline void read(__int128 &x){
bool f=0;
x=0;
char c=getchar();
if(c=='-'){
f=1;
c=getchar();
}
while(c<='9'&&c>='0'){
x=x*10+c-'0';
c=getchar();
}
if(f) x=-x;
}
inline void print(__int128 x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9) print(x/10);
putchar(x%10+48);
return;
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>p;
for(int i=1;i<=n;++i){
read(a[i]);
}
v[1]=t[1]=tmp=ans=a[1];
for(int i=2;i<=n;++i){
if(tmp<0) tmp=0;
tmp+=a[i];
maxx=max(maxx,tmp);
t[i]=maxx;
}
__int128 maxn=t[1]+v[1];
for(int i=2;i<=n;++i){
v[i]=maxn;
ans=max(ans,v[i]);
maxn=max(maxn,t[i]+v[i]);
}
print(ans%p);
// putchar('\n');
// for(int i=1;i<=n;++i){
// print(a[i]);
// putchar(' ');
// }
// putchar('\n');
// for(int i=1;i<=n;++i){
// print(t[i]);
// putchar(' ');
// }
// putchar('\n');
// for(int i=1;i<=n;++i){
// print(v[i]);
// putchar(' ');
// }
return 0;
}