// Author: Bartek Knapik
#include<iostream>
#include<vector>
using namespace std;
int n, m, q, v, x, type, set1, set2;
vector<vector<unsigned long long>> sets;
int main()
{
scanf("%d%d%d", &n, &m, &q);
sets.resize(1+n+m);
for (int i = 1; i <= n + m; ++i)
sets[i].resize((n+64)>>6);
for (int i = 1; i <= n; ++i)
for (int j = 1; i*j <= n; ++j)
{
int s_pos = (i*j) >> 6;
int b_pos = (i*j) & ((1ULL << 6) - 1);
sets[i][s_pos] |= (1ULL << b_pos);
}
for (int i = 0; i < m; ++i)
{
scanf("%d%d", &type, &set1);
if (type != 3) scanf("%d", &set2);
if (type == 1)
for (int j = 0; j < ((n+64)>>6); ++j)
sets[i+n+1][j] = sets[set1][j] | sets[set2][j];
else if (type == 2)
for (int j = 0; j < ((n+64)>>6); ++j)
sets[i+n+1][j] = sets[set1][j] & sets[set2][j];
else if (type == 3)
for (int j = 0; j < ((n+64)>>6); ++j)
sets[i+n+1][j] = ~sets[set1][j];
}
for (int i = 0; i < q; ++i)
{
scanf("%d%d", &x, &v);
int s_pos = v >> 6;
int b_pos = v & ((1ULL << 6) - 1);
bool res = sets[x][s_pos] & (1ULL << b_pos);
if (res)
printf("TAK\n");
else
printf("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 | // Author: Bartek Knapik #include<iostream> #include<vector> using namespace std; int n, m, q, v, x, type, set1, set2; vector<vector<unsigned long long>> sets; int main() { scanf("%d%d%d", &n, &m, &q); sets.resize(1+n+m); for (int i = 1; i <= n + m; ++i) sets[i].resize((n+64)>>6); for (int i = 1; i <= n; ++i) for (int j = 1; i*j <= n; ++j) { int s_pos = (i*j) >> 6; int b_pos = (i*j) & ((1ULL << 6) - 1); sets[i][s_pos] |= (1ULL << b_pos); } for (int i = 0; i < m; ++i) { scanf("%d%d", &type, &set1); if (type != 3) scanf("%d", &set2); if (type == 1) for (int j = 0; j < ((n+64)>>6); ++j) sets[i+n+1][j] = sets[set1][j] | sets[set2][j]; else if (type == 2) for (int j = 0; j < ((n+64)>>6); ++j) sets[i+n+1][j] = sets[set1][j] & sets[set2][j]; else if (type == 3) for (int j = 0; j < ((n+64)>>6); ++j) sets[i+n+1][j] = ~sets[set1][j]; } for (int i = 0; i < q; ++i) { scanf("%d%d", &x, &v); int s_pos = v >> 6; int b_pos = v & ((1ULL << 6) - 1); bool res = sets[x][s_pos] & (1ULL << b_pos); if (res) printf("TAK\n"); else printf("NIE\n"); } return 0; } |
English