#include <bits/stdc++.h>
using namespace std;
array <vector<array<int,2>>,50001> v;
array <vector<int>,50001>d;
unsigned long long x;
vector <array<unsigned int,3>>p;
bool r[1000000];
unsigned long long t,f;
unsigned long long w[450001];
unsigned long long n,m,q,i,j,a,b,c;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m >> q;
for (i=1;i<=n;i++)
for(j=i;j<=n;j+=i)
d[j].push_back(i);
for(i=0;i<m;i++){
cin >> a >> b;
if(a==3)
c=0;
else
cin >> c;
p.push_back({a,b,c});
}
for(i=0;i<q;i++){
cin >> a >> b;
v[b].push_back({a,i});
}
for(i=1;i<=n;i+=64){
memset(w,0,8*(n+1));
for(j=0;j<64;j++) {
t=1LLU<<j;
if(i+j>n)
break;
for(auto s:d[i+j]) {
w[s]|=t;
}
}
j=n+1;
for(auto y:p) {
if(y[0]==3)
w[j]=~w[y[1]];
else if (y[0]==1)
w[j]=w[y[1]]|w[y[2]];
else
w[j]=w[y[1]]&w[y[2]];
j++;
}
for(j=i;j<i+64 && j<=n;j++) {
t=1LLU<<(j-i);
for(auto g:v[j])
if(t&w[g[0]])
r[g[1]]=1;
}
}
for(i=0;i<q;i++)
if(r[i])
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 | #include <bits/stdc++.h> using namespace std; array <vector<array<int,2>>,50001> v; array <vector<int>,50001>d; unsigned long long x; vector <array<unsigned int,3>>p; bool r[1000000]; unsigned long long t,f; unsigned long long w[450001]; unsigned long long n,m,q,i,j,a,b,c; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> q; for (i=1;i<=n;i++) for(j=i;j<=n;j+=i) d[j].push_back(i); for(i=0;i<m;i++){ cin >> a >> b; if(a==3) c=0; else cin >> c; p.push_back({a,b,c}); } for(i=0;i<q;i++){ cin >> a >> b; v[b].push_back({a,i}); } for(i=1;i<=n;i+=64){ memset(w,0,8*(n+1)); for(j=0;j<64;j++) { t=1LLU<<j; if(i+j>n) break; for(auto s:d[i+j]) { w[s]|=t; } } j=n+1; for(auto y:p) { if(y[0]==3) w[j]=~w[y[1]]; else if (y[0]==1) w[j]=w[y[1]]|w[y[2]]; else w[j]=w[y[1]]&w[y[2]]; j++; } for(j=i;j<i+64 && j<=n;j++) { t=1LLU<<(j-i); for(auto g:v[j]) if(t&w[g[0]]) r[g[1]]=1; } } for(i=0;i<q;i++) if(r[i]) cout << "TAK\n"; else cout << "NIE\n"; } |
English