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;
}