Submission #1143617

#TimeUsernameProblemLanguageResultExecution timeMemory
1143617crispxxIntergalactic ship (IZhO19_xorsum)C++20
17 / 100
2094 ms2632 KiB
/**
 *    author: a.k
 *    created: idk
**/
#include <bits/stdc++.h>
using namespace std;
 
#define all(x) x.begin(), x.end()
#define int long long
#define nl '\n'

const int Mod = 1e9 + 7;

void add(int &a, const int &b) {
	a += b;
	if(a > Mod) {
		a -= Mod;
	}
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int n; cin >> n;
	
	
	vector<int> b(n);
	
	for(auto &u : b) cin >> u;
	
	int q; cin >> q;
	
	vector<array<int, 3>> v(q);
	
	for(auto &[l, r, x] : v) {
		cin >> l >> r >> x;
		l--;
	}
	
	int ans = 0;
	
	for(int mask = 0; mask < (1 << q); mask++) {
		auto a = b;
		for(int i = 0; i < q; i++) {
			if(mask >> i & 1) {
				auto [l, r, x] = v[i];
				for(int k = l; k < r; k++) a[k] ^= x;
			}
		}
		
		vector<int> pref(n + 1);
		for(int i = 0; i < n; i++) add(pref[i + 1], pref[i] + a[i]);
		
		int sum = 0;
		
		for(int i = 0; i < n; i++) {
			for(int j = i; j < n; j++) {
				int u = pref[j + 1] - pref[i];
				add(sum, (u * u) % Mod);
			}
		}
		
		add(ans, sum);
	}
	
	cout << ans << nl;
}
#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...