#include <cstdio>
#include <cstdint>
#include <vector>
#include <bitset>
using namespace std;
vector<vector<uint32_t>> vecs;
int n,m,q;
int vec_size;
vector<uint32_t> new_vec ()
{
vector<uint32_t> result = vector<uint32_t>(vec_size);
for(int i = 0;i< vec_size; ++i)
{
result[i]= 0;
}
return result;
}
int main ()
{
scanf("%d %d %d", &n, &m, &q);
//n = 33;
vec_size = (n >> 5) + 3;
for(int i = 0;i<=n;++i)
{
vecs.push_back(new_vec());
}
for(int i = 1;i<=n;++i)
{
for(int j = i; j<=n; j+=i)
{
int index = (j-1) >> 5;
uint32_t subindex = 1 << ((j-1) & 0xff);
vecs[i][index]|=subindex;
//printf("%d %d %d %d\n", i, index, subindex, vecs[i][index] );
}
}
int a,b,c;
for(int i = 0; i< m;++i)
{
scanf("%d", &a);
vector<uint32_t> toAppend = new_vec();
switch (a)
{
case 1:
scanf("%d %d", &b, &c);
for(int i =0;i<vec_size;++i)
{
toAppend[i]=vecs[b][i] | vecs[c][i];
}
break;
case 2:
scanf("%d %d", &b, &c);
for(int i =0;i<vec_size;++i)
{
toAppend[i]=vecs[b][i] & vecs[c][i];
}
break;
case 3:
scanf("%d", &b);
for(int i =0;i<vec_size;++i)
{
toAppend[i]=~vecs[b][i];
}
break;
}
// printf("%d %d %d\n", a,b,c);
vecs.push_back(toAppend);
}
//printf("fdfaf");
for (int i =0;i<q;++i)
{
scanf("%d %d", &b, &c);
int index = (c-1) >> 5;
uint32_t subindex = 1 << ((c-1) & 0xff);
if(vecs[b][index] & subindex){
printf("TAK\n");
}
else
{
printf("NIE\n");
}
}
//printf("%d %d %d\n", n,m,q);
}
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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #include <cstdio> #include <cstdint> #include <vector> #include <bitset> using namespace std; vector<vector<uint32_t>> vecs; int n,m,q; int vec_size; vector<uint32_t> new_vec () { vector<uint32_t> result = vector<uint32_t>(vec_size); for(int i = 0;i< vec_size; ++i) { result[i]= 0; } return result; } int main () { scanf("%d %d %d", &n, &m, &q); //n = 33; vec_size = (n >> 5) + 3; for(int i = 0;i<=n;++i) { vecs.push_back(new_vec()); } for(int i = 1;i<=n;++i) { for(int j = i; j<=n; j+=i) { int index = (j-1) >> 5; uint32_t subindex = 1 << ((j-1) & 0xff); vecs[i][index]|=subindex; //printf("%d %d %d %d\n", i, index, subindex, vecs[i][index] ); } } int a,b,c; for(int i = 0; i< m;++i) { scanf("%d", &a); vector<uint32_t> toAppend = new_vec(); switch (a) { case 1: scanf("%d %d", &b, &c); for(int i =0;i<vec_size;++i) { toAppend[i]=vecs[b][i] | vecs[c][i]; } break; case 2: scanf("%d %d", &b, &c); for(int i =0;i<vec_size;++i) { toAppend[i]=vecs[b][i] & vecs[c][i]; } break; case 3: scanf("%d", &b); for(int i =0;i<vec_size;++i) { toAppend[i]=~vecs[b][i]; } break; } // printf("%d %d %d\n", a,b,c); vecs.push_back(toAppend); } //printf("fdfaf"); for (int i =0;i<q;++i) { scanf("%d %d", &b, &c); int index = (c-1) >> 5; uint32_t subindex = 1 << ((c-1) & 0xff); if(vecs[b][index] & subindex){ printf("TAK\n"); } else { printf("NIE\n"); } } //printf("%d %d %d\n", n,m,q); } |
English