#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 1e9 + 7, V = 32;
signed main()
{
int n;
cin>>n;
int a[n];
for (int i=0;i<n;i++)
cin>>a[i];
int q;
cin>>q;
if (q<=20)
{
int v[n][(1<<q)];
for (int i=0;i<n;i++)
v[i][0]=a[i];
int l[q],r[q],x[q];
for (int i=0;i<q;i++)
cin>>l[i]>>r[i]>>x[i];
for (int m=1;m<(1<<q);m++)
{
int b=31-__builtin_clz(m);
for (int i=0;i<n;i++)
v[i][m]=v[i][m^(1<<b)];
for (int i=l[b]-1;i<r[b];i++)
v[i][m]^=x[b];
}
int ans=0;
for (int m=0;m<(1<<q);m++)
{
int pre[n],suf[n];
pre[0]=v[0][m];
for (int i=1;i<n;i++)
pre[i]=pre[i-1]+v[i][m]*(i+1);
suf[n-1]=v[n-1][m];
for (int i=n-2;i>=0;i--)
suf[i]=suf[i+1]+v[i][m]*(n-i);
for (int i=0;i+1<n;i++)
ans=(ans+pre[i]*suf[i+1]*2)%mod;
for (int i=0;i<n;i++)
ans=(ans+v[i][m]*(n-i)*(i+1)*v[i][m])%mod;
}
cout<<ans<<endl;
}
else
cout<<0<<endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |