#include <cstdio>
#include <vector>
#include <bitset>
const int MAX_N = 50000;
const int MAX_M = 400000;
int main () {
std::vector<std::bitset<MAX_N> > sets(MAX_N + MAX_M, std::bitset<MAX_N>());
int n, m, q, op, p1, p2, i, j, s, v;
scanf("%d %d %d", &n, &m, &q);
for (i = 1; i <= n; ++i) {
for (j = i; j <= n; j += i) {
sets[i - 1][j - 1] = true;
}
}
for (i = 0; i < m; ++i) {
scanf("%d %d", &op, &p1);
if (op != 3) {
scanf("%d", &p2);
}
if (op == 1) {
sets[n + i] = sets[p1 - 1] | sets[p2 - 1];
}
else if (op == 2) {
sets[n + i] = sets[p1 - 1] & sets[p2 - 1];
}
else {
sets[n + i] = ~sets[p1 - 1];
}
}
for (i = 0; i < q; ++i) {
scanf("%d %d", &s, &v);
printf(sets[s - 1][v - 1] ? "TAK\n" : "NIE\n");
}
return 0;
}
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 | #include <cstdio> #include <vector> #include <bitset> const int MAX_N = 50000; const int MAX_M = 400000; int main () { std::vector<std::bitset<MAX_N> > sets(MAX_N + MAX_M, std::bitset<MAX_N>()); int n, m, q, op, p1, p2, i, j, s, v; scanf("%d %d %d", &n, &m, &q); for (i = 1; i <= n; ++i) { for (j = i; j <= n; j += i) { sets[i - 1][j - 1] = true; } } for (i = 0; i < m; ++i) { scanf("%d %d", &op, &p1); if (op != 3) { scanf("%d", &p2); } if (op == 1) { sets[n + i] = sets[p1 - 1] | sets[p2 - 1]; } else if (op == 2) { sets[n + i] = sets[p1 - 1] & sets[p2 - 1]; } else { sets[n + i] = ~sets[p1 - 1]; } } for (i = 0; i < q; ++i) { scanf("%d %d", &s, &v); printf(sets[s - 1][v - 1] ? "TAK\n" : "NIE\n"); } return 0; } |
English