#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"; } |