MnZn求调,70pts卡半天了
查看原帖
MnZn求调,70pts卡半天了
469828
CeciliaWind楼主2022/10/26 08:24
#include <cstdio>
#define int long long 

using namespace std;

const int N=1e6+50,mod=998244353,n6=166374059;
int n,k,a[N];
long long ans;

long long S(long long x){return (x*(x+1)%mod*(2*x+1)%mod*n6)%mod;}  // \sum_{i=1}^x(i^2)

signed main() {
	scanf("%lld%lld",&n,&k);
	for(int i=1;i<=n;i++) {
		scanf("%lld",&a[i]);
		if(a[i]<0) {
			int m=-2*a[i]-1;
			if(m>=k) ans=ans+(k*(a[i]+1)*(a[i]+1)%mod)%mod;
			else ans=ans+(((m)*(a[i]+1)*(a[i]+1)%mod+(S(a[i]+k)-S(a[i]+m)+mod)%mod)%mod)%mod;
		}
		else ans=(ans+(S(a[i]+k)-S(a[i])+mod)%mod)%mod;
	}
	printf("%lld",ans%mod);
}

关注为报,谢谢dalao

2022/10/26 08:24
加载中...