#include <iostream>
#include <set>
#include <vector>
#define ull unsigned long long
using namespace std;
int n;
int main() {
int m, q;
cin >> n >> m >> q;
const int setsize = (n + 63) / 64;
vector<vector<ull>> sets(n + m, vector<ull>(setsize, 0));
for (int i = 0; i < n; i++) {
for (int j = i + 1; j <= n; j += i + 1) //
sets[i][(j - 1) / 64] |= ((ull)1 << (j - 1) % 64);
}
// struct instr {
// int type, a, b;
// };
// vector<instr> instrs(m);
// for (auto &i : instrs) {
// cin >> i.type >> i.a;
// if (i.type != 3) cin >> i.b;
// }
for (int i = n; i < n + m; i++) {
int type, x, y;
cin >> type;
switch (type) {
case 1:
cin >> x >> y;
for (int j = 0; j < setsize; j++) {
sets[i][j] = sets[x - 1][j] | sets[y - 1][j];
}
break;
case 2:
cin >> x >> y;
for (int j = 0; j < setsize; j++) {
sets[i][j] = sets[x - 1][j] & sets[y - 1][j];
}
break;
case 3:
cin >> x;
for (int j = 0; j < setsize; j++) {
sets[i][j] = ~sets[x - 1][j];
}
break;
}
}
// vector<set<int>> ques(m);
// for (int i = 0; i < q; i++) {
// int x, v;
// cin >> x >> v;
// ques[x - 1].insert(v);
// }
for (int i = 0; i < q; i++) {
int x, v;
cin >> x >> v;
x--, v--;
if (sets[x][v / 64] & (ull)1 << v % 64) //
cout << "TAK\n"; //
else
cout << "NIE\n";
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include <iostream> #include <set> #include <vector> #define ull unsigned long long using namespace std; int n; int main() { int m, q; cin >> n >> m >> q; const int setsize = (n + 63) / 64; vector<vector<ull>> sets(n + m, vector<ull>(setsize, 0)); for (int i = 0; i < n; i++) { for (int j = i + 1; j <= n; j += i + 1) // sets[i][(j - 1) / 64] |= ((ull)1 << (j - 1) % 64); } // struct instr { // int type, a, b; // }; // vector<instr> instrs(m); // for (auto &i : instrs) { // cin >> i.type >> i.a; // if (i.type != 3) cin >> i.b; // } for (int i = n; i < n + m; i++) { int type, x, y; cin >> type; switch (type) { case 1: cin >> x >> y; for (int j = 0; j < setsize; j++) { sets[i][j] = sets[x - 1][j] | sets[y - 1][j]; } break; case 2: cin >> x >> y; for (int j = 0; j < setsize; j++) { sets[i][j] = sets[x - 1][j] & sets[y - 1][j]; } break; case 3: cin >> x; for (int j = 0; j < setsize; j++) { sets[i][j] = ~sets[x - 1][j]; } break; } } // vector<set<int>> ques(m); // for (int i = 0; i < q; i++) { // int x, v; // cin >> x >> v; // ques[x - 1].insert(v); // } for (int i = 0; i < q; i++) { int x, v; cin >> x >> v; x--, v--; if (sets[x][v / 64] & (ull)1 << v % 64) // cout << "TAK\n"; // else cout << "NIE\n"; } } |
English