#include <bits/stdc++.h>
using namespace std;
array <vector<int>,50001>d;
unsigned long long x;
//array<unsigned short int,3> y;
vector <array<unsigned int,3>>p;
bool r[1000000];
unsigned long long t,f,k,s;
bitset<12500> w[450001];
bitset<12500> v[4];
unsigned long long n,m,q,i,j,a,b,c;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> s;
for (i=1;i<=n;i++)
for(j=i;j<=n;j+=i)
d[j].push_back(i);
j=0;
for (j=0;j<s;j++) {
cin >> c;
c--;
v[c/12500].set(c%12500);
}
f=0;
for(k=0;k<50000 ;k+=12500) {
for(j=0;j<=n;j++)
w[j].reset();
for(i=k;i<n && i-k<12500;i++){
for(auto s:d[i+1]) {
w[s].set(i-k);
}
}
m=n;
for(auto y:p) {
m++;
if(y[0]==3)
w[m]=~w[y[1]];
else if (y[0]==1)
w[m]=w[y[1]]|w[y[2]];
else
w[m]=w[y[1]]&w[y[2]];
}
for(j=k; j<n && j-k<12500;j++) {
if(w[m].test(j-k)>v[f].test(j-k)){
p.push_back({3,j+1,0});
p.push_back({2,m+1,m});
w[m+1]=~w[j+1];
w[m+2]=w[m+1]&w[m];
m+=2;
}
else if (w[m].test(j-k)<v[f].test(j-k)){
p.push_back({1,j+1,m});
w[m+1]=w[m]|w[j+1];
m+=1;
}
}
f++;
}
cout << m-n << '\n';
for(auto y:p) {
cout << y[0] << ' ' << y[1];
if(y[0]<3) cout << ' ' << y[2];
cout << '\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 68 69 70 | #include <bits/stdc++.h> using namespace std; array <vector<int>,50001>d; unsigned long long x; //array<unsigned short int,3> y; vector <array<unsigned int,3>>p; bool r[1000000]; unsigned long long t,f,k,s; bitset<12500> w[450001]; bitset<12500> v[4]; unsigned long long n,m,q,i,j,a,b,c; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> s; for (i=1;i<=n;i++) for(j=i;j<=n;j+=i) d[j].push_back(i); j=0; for (j=0;j<s;j++) { cin >> c; c--; v[c/12500].set(c%12500); } f=0; for(k=0;k<50000 ;k+=12500) { for(j=0;j<=n;j++) w[j].reset(); for(i=k;i<n && i-k<12500;i++){ for(auto s:d[i+1]) { w[s].set(i-k); } } m=n; for(auto y:p) { m++; if(y[0]==3) w[m]=~w[y[1]]; else if (y[0]==1) w[m]=w[y[1]]|w[y[2]]; else w[m]=w[y[1]]&w[y[2]]; } for(j=k; j<n && j-k<12500;j++) { if(w[m].test(j-k)>v[f].test(j-k)){ p.push_back({3,j+1,0}); p.push_back({2,m+1,m}); w[m+1]=~w[j+1]; w[m+2]=w[m+1]&w[m]; m+=2; } else if (w[m].test(j-k)<v[f].test(j-k)){ p.push_back({1,j+1,m}); w[m+1]=w[m]|w[j+1]; m+=1; } } f++; } cout << m-n << '\n'; for(auto y:p) { cout << y[0] << ' ' << y[1]; if(y[0]<3) cout << ' ' << y[2]; cout << '\n'; } } |
English