求助UB
查看原帖
求助UB
288716
lzqy_楼主2021/9/24 22:04

rt,洛谷IDE试过了,不开O2没问题,开O2样例输出0

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=2000010;
const ll mod=998244353; 
inline ll read(){
	register ll x=0;
	register char c=getchar();
	for(;!(c>='0'&&c<='9');c=getchar());
	for(;c>='0'&&c<='9';c=getchar())
		x=(x<<1)+(x<<3)+c-'0';
	return x;
}
ll fastpow(ll n,ll m){
	register ll a=n,S=1;
	while(m){
		if(m&1) S=(S*a)%mod;
		a=(a*a)%mod,m>>=1;
	}
	return S;
}
ll Mod(ll a,ll b){
	a=(a%mod+mod)%mod,b=(b%mod+mod%mod);
	return a*fastpow(b,mod-2ll)%mod;
}
ll a[maxn],n,m;
ll pre[maxn];
ll Sum(ll l,ll r){
	return Mod((l+r)*(r-l+1),2ll);
}
int main(){
	read(),n=read(),m=read();
	for(register ll i=1;i<=n;i++)
		a[i]=read(),pre[i]=(pre[i-1]+a[i])%mod;
	register ll l,r,k,m,mm,x;
	register ll ans=0;
	while(m--){
		l=read(),r=read(),k=read();
		m=min(k-l,r-k),mm=r-l+1>>1;
		x=Mod((pre[k-1]-pre[l-1])*Sum(1,m),m)+Mod((pre[r]-pre[k])*Sum(1,m),m),x%=mod;
		x+=(m+1)*a[k],x%=mod;
		ans^=Mod(x,mm+1),ans%=mod;
	}
	printf("%lld\n",ans);
//	cout<<"499122189\n";
	return 0;
}
2021/9/24 22:04
加载中...