#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 1e9 + 7, M = 1000, V = 128;
int now[M][V],now1[M][V],su[M];
signed main()
{
int n;
cin>>n;
int a[n];
for (int i=0;i<n;i++)
cin>>a[i],now[i][a[i]]=1;
int q;
cin>>q;
while (q--)
{
int l,r,x;
cin>>l>>r>>x;
for (int i=l-1;i<r;i++)
{
for (int y=0;y<V;y++)
now1[i][x^y]+=now[i][y],now1[i][x^y]-=(now1[i][x^y]>=mod?mod:0);
for (int y=0;y<V;y++)
now[i][y]+=now1[i][y],now[i][y]-=(now[i][y]>=mod?mod:0),now1[i][y]=0;
}
}
int ans=0;
for (int i=0;i<n;i++)
for (int y=0;y<V;y++)
su[i]=(su[i]+now[i][y]*y)%mod,ans=(ans+now[i][y]*y*y%mod*(i+1)*(n-i))%mod;
for (int i=0;i<n;i++)
for (int j=i+1;j<n;j++)
ans=(ans+2*su[i]*su[j]%mod*(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... |