#include <vector>
#include <iostream>
#include <bitset>
using namespace std;
const int MAX_BITS = 50000;
int main()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
int n, m, q;
int op, x, y;
cin >> n >> m >> q;
vector<bitset<MAX_BITS>> sets(n + m);
// Inicjalizacja zbiorów
for (int i = 0; i < n; i++) {
int step = i + 1;
// Optymalizacja dla przypadku i=0 (wszystkie bity na 1)
if (step == 1)
{
sets[i].set();
}
else
{
// Skaczemy co 'step'
for (int j = step - 1; j < MAX_BITS; j += step)
{
sets[i].set(j);
}
}
}
// Tworzenie zbiorów
for (int i = 0; i < m; i++)
{
cin >> op;
if (op == 1)
{
cin >> x >> y;
sets[n + i] = sets[x - 1] | sets[y - 1];
}
else if (op == 2)
{
cin >> x >> y;
sets[n + i] = sets[x - 1] & sets[y - 1];
}
else if (op == 3)
{
cin >> x;
sets[n + i] = ~sets[x - 1];
}
}
// Debug
/*for (int i = 0; i < n + m; i++)
{
for (int j = 0; j < 8; j++)
{
cout << sets[i][j];
}
cout << endl;
}*/
// Odpowiedzi
for (int i = 0; i < q; i++)
{
cin >> x >> y;
if (sets[x - 1][y - 1])
{
cout << "TAK\n";
}
else
{
cout << "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 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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #include <vector> #include <iostream> #include <bitset> using namespace std; const int MAX_BITS = 50000; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int n, m, q; int op, x, y; cin >> n >> m >> q; vector<bitset<MAX_BITS>> sets(n + m); // Inicjalizacja zbiorów for (int i = 0; i < n; i++) { int step = i + 1; // Optymalizacja dla przypadku i=0 (wszystkie bity na 1) if (step == 1) { sets[i].set(); } else { // Skaczemy co 'step' for (int j = step - 1; j < MAX_BITS; j += step) { sets[i].set(j); } } } // Tworzenie zbiorów for (int i = 0; i < m; i++) { cin >> op; if (op == 1) { cin >> x >> y; sets[n + i] = sets[x - 1] | sets[y - 1]; } else if (op == 2) { cin >> x >> y; sets[n + i] = sets[x - 1] & sets[y - 1]; } else if (op == 3) { cin >> x; sets[n + i] = ~sets[x - 1]; } } // Debug /*for (int i = 0; i < n + m; i++) { for (int j = 0; j < 8; j++) { cout << sets[i][j]; } cout << endl; }*/ // Odpowiedzi for (int i = 0; i < q; i++) { cin >> x >> y; if (sets[x - 1][y - 1]) { cout << "TAK\n"; } else { cout << "NIE\n"; } } return 0; } |
English