50分,__int128不会也爆吧
查看原帖
50分,__int128不会也爆吧
158400
晴空一鹤楼主2022/10/23 12:31
#include<bits/stdc++.h>
using namespace std;
#define ll __int128
ll mod=998244353;
ll a[1000005],sum[1000005],n,k,summ[1000005],ans,jj,pfh[1000005];
void inline r(ll &x)
{
	x=0;char c=getchar();ll f=1;
	while(c<'0'||c>'9'){
    if(c=='-')
    f=-1;
	c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=(x<<1)+(x<<3)+(c^48);
		c=getchar();
	}
	x*=f;
}
void inline pri(ll x)
{
	if(x>=10)pri(x/10);
	putchar(x%10^48);
}
int main()
{
	r(n);r(k);
	for(int i=1;i<=n;i++){
	r(a[i]);
	if(a[i]<0)sum[i]=sum[i-1]+(a[i]+1)*(a[i]+1);
	if(a[i]>=0&&a[i-1]<0)jj=i-1;
	}
	for(int i=n;i>=1;i--)
	summ[i]=summ[i+1]+a[i],pfh[i]=pfh[i+1]+a[i]*a[i];
	for(ll i=1;i<=k;i++)
	{
		while(jj>0&&a[jj]*(ll)(-2)<=k)
		jj--;
		ans+=pfh[jj+1]+i*i*(n-jj)+(ll)2*i*summ[jj+1];
		if(jj!=0)ans+=sum[jj];
		ans%=mod;
	}
	pri(ans);
}
2022/10/23 12:31
加载中...