#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<=10)
{
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++)
{
for (int i=0;i<n;i++)
{
ans=(ans+v[i][m]*(n-i)*(i+1)*v[i][m])%mod;
for (int j=i+1;j<n;j++)
ans=(ans+v[i][m]*v[j][m]*(n-j)*(i+1)*2)%mod;
}
}
cout<<ans<<endl;
}
else
{
int now[n][V]={};
for (int i=0;i<n;i++)
now[i][a[i]]=1;
while (q--)
{
int l,r,x;
cin>>l>>r>>x;
for (int i=0;i<n;i++)
{
if (i==l-1)
{
int ot[V];
for (int j=0;j<V;j++)
ot[j^x]=now[i][j];
for (int j=0;j<V;j++)
now[i][j]=(now[i][j]+ot[j])%mod;
}
else
{
for (int j=0;j<V;j++)
now[i][j]=now[i][j]*2%mod;
}
}
}
int ans=0;
for (int i=0;i<n;i++)
{
for (int x=0;x<V;x++)
{
ans=(ans+x*x*(i+1)*(n-i))%mod;
for (int j=i+1;j<n;j++)
for (int y=0;y<V;y++)
ans=(ans+x*y*2*(i+1)*(n-j))%mod;
}
}
cout<<ans<<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... |