Submission #1156286

#TimeUsernameProblemLanguageResultExecution timeMemory
1156286MuhammadSaramIntergalactic ship (IZhO19_xorsum)C++20
9 / 100
1963 ms1212 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...