95pts求助
查看原帖
95pts求助
207412
xiaoPanda楼主2022/10/24 16:09
#include<bits/stdc++.h>
#define int long long
using namespace std;
using db=double;
using vi=vector<int>;
using pii=pair<int,int>;
using ull=unsigned long long;
using pq=priority_queue<int>;
using pqn=priority_queue<int,vector<int>,greater<int> >;
#define ft first
#define sd second
#define gc getchar
#define pb push_back
#define emp emplace_back
#define mp make_pair
#define lowbit(n) ((n)&-(n))
#define ls (p*2)
#define rs (p*2+1)
#define sz(a) a.size()
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define ROF(i,a,b) for(int i=a;i>=b;i--)
const int N=1e6+7;
const int INF=4557430888798830399ll;
const int inf=INT_MAX;
const int K=233;
const int mod=998244353;
void read(int &x)//
{
	char ch=getchar();
	int r=0,w=1;
	while(!isdigit(ch))w=ch=='-'?-1:1,ch=getchar();
	while(isdigit(ch))r=(r<<3)+(r<<1)+(ch^48),ch=getchar();
	x=r*w;
}
void write(int x) {
	char ch[20];
	int len = 0;
	if (x < 0)putchar('-'), x = -x;
	while (x) {
		ch[len++] = (x % 10) ^ 48;
		x /= 10;
	}
	if(len==0)printf("0");
	while (len--)putchar(ch[len]);
	putchar('\n');
}
int sum[N],sumq[N],a[N];
signed main()
{
	//freopen("ex.in","r",stdin);
	//freopen("ex.ans","w",stdout);
	int n,m,ans=0,now;
	read(n),read(m);now=n;
	FOR(i,1,n)
	{
		read(a[i]);
		sum[i]=sum[i-1]+a[i]%mod;sum[i]%=mod;
		sumq[i]=sumq[i-1]+a[i]*a[i]%mod;sumq[i]%=mod;
	}
	FOR(i,1,m)
	{
		while(now>=1&&abs(a[now]+i)>abs(a[now]+1))now--;
		ans+=((sumq[n]-sumq[now])%mod+mod)%mod+i*i%mod*(n-now)%mod+(((sum[n]-sum[now])%mod+mod)*2ll%mod*i%mod+mod)%mod,ans%=mod;
		ans+=sumq[now]%mod+sum[now]*2%mod+now%mod,ans%=mod;
	}
	write(ans);
	return 0;
}
/*
a[i]-

*/
2022/10/24 16:09
加载中...