Files
exercises/dsa/linear_list/dsa_0206_binary_query.cpp
T
2026-09-25 20:20:01 +08:00

56 lines
1.0 KiB
C++

#include <iostream>
using namespace std;
constexpr size_t MAX_N = 100005, MAX_DIGITS = 16;
int n, m;
int bits[MAX_DIGITS];
void print_bits(ostream& os = clog) {
for (const int bit : bits) { os << bit; }
os << endl;
}
void update_bits(const int num) {
for (int i = 0; i < MAX_DIGITS; i++) {
bits[i] += (num >> i) & 1;
}
}
void add(int num) {
for (int i = 0; i < MAX_DIGITS; i++) {
const bool current_bit = num & 1;
num >>= 1;
if (current_bit == 0) { continue; }
num += bits[i];
bits[i] = n - bits[i];
print_bits();
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int _ = 0; _ < n; _++) {
int num;
cin >> num;
update_bits(num);
}
for (int _ = 0; _ < m; _++) {
print_bits();
char op;
int x;
cin >> op >> x;
if (op == 'Q') {
cout << bits[x] << endl;
} else {
add(x);
}
}
return 0;
}