#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MOD = 998244353;
int lret,rret,sum,ans;
int n,k,mid,a[1000010];
inline int pow2(int x){
return (x*x)%MOD;
}
signed main(){
//freopen("in.txt","r",stdin);
scanf("%lld%lld", &n, &k);
for(int i=1;i<=n;i++){
scanf("%lld", &a[i]);
if(a[i]<0)lret=(lret+pow2(a[i]+1))%MOD;
else if(a[i]>=0)rret=(rret+pow2(a[i]))%MOD,sum=(sum+a[i])%MOD;
if(!mid&&a[i]>=0&&a[i-1]<0)mid=i-1;
}
if(a[n]<0)mid=n;
ans=(lret+rret+2*sum+(n-mid))%MOD;
for(int i=2;i<=k;i++){
ans=(ans+lret+rret+2*i*sum+pow2(i)*(n-mid))%MOD;
while(mid&&a[mid]+i==-(a[mid]+1)){
lret=(MOD+lret-pow2(a[mid]+1))%MOD;
sum=(MOD+sum+a[mid])%MOD;
rret=(rret+pow2(a[mid]))%MOD;
mid--;
}
}
printf("%lld", ans);
return 0;
}
开了long long,取了模。
四号测试点Wrong Answer
求调