Trilogy xor
unknown
c_cpp
5 months ago
1.2 kB
2
Indexable
#include <iostream> #include <vector> using namespace std; int applyMask(int val, int y) { return (val & (1 << (y - 1))); } int findEnd(const vector<int>& a, int x, int n, int mask) { int end = x; while (end < n && applyMask(a[end], mask)) { end++; } return end; } int solve(vector<int> a, vector<vector<int>> q) { int totalUpdates = 0; int n = a.size(); for (const auto& query : q) { int x = query[0] - 1; int y = query[1]; int z = query[2]; int mask = 1 << (y - 1); int end = findEnd(a, x, n, mask); int sizeToUpdate = end - x; if (sizeToUpdate > 0) { for (int i = x; i < end; ++i) { a[i] ^= z; } totalUpdates += sizeToUpdate; } } return totalUpdates; } int main() { int n, q; cin >> n; vector<int> a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } cin >> q; vector<vector<int>> queries(q, vector<int>(3)); for (int i = 0; i < q; ++i) { cin >> queries[i][0] >> queries[i][1] >> queries[i][2]; } cout << solve(a, queries) << endl; return 0; }
Editor is loading...
Leave a Comment