#include <bits/stdc++.h>
#pragma GCC target("popcnt")
using namespace std;
typedef long long LL;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, s;
vector<bitset<50001>> b(150003);
cin>>n>>s;
for(int i=1; i<=n; i++){
for(int j=i; j<=n; j+=i){
b[i][j]=true;
}
}
if(n==1){
cout<<"0\n";
return 0;
}
int i = 1;
int m = 1;
vector<tuple<int, int, int>> res;
b[n+1] = b[1];
res.push_back({1, 1, 2});
while(s--){
int x;
cin>>x;
for(; i<x; i++){
if(b[n+m][i]==true){
res.push_back({3, i, 0});
b[n+m+1] = ~b[i];
res.push_back({2, n+m, n+m+1});
b[n+m+2] = b[n+m] & b[n+m+1];
m+=2;
}
}
if(b[n+m][x]==false){
res.push_back({1, n+m, x});
b[n+m+1] = b[n+m] | b[x];
m++;
}
i++;
}
for(; i<=n; i++){
if(b[n+m][i]==true){
res.push_back({3, i, 0});
b[n+m+1] = ~b[i];
res.push_back({2, n+m, n+m+1});
b[n+m+2] = b[n+m] & b[n+m+1];
m+=2;
}
}
cout<<m<<"\n";
for(auto [a, b, c] : res){
if(a!=3)cout<<a<<" "<<b<<" "<<c<<"\n";
else cout<<a<<" "<<b<<"\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 58 59 60 61 62 | #include <bits/stdc++.h> #pragma GCC target("popcnt") using namespace std; typedef long long LL; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, s; vector<bitset<50001>> b(150003); cin>>n>>s; for(int i=1; i<=n; i++){ for(int j=i; j<=n; j+=i){ b[i][j]=true; } } if(n==1){ cout<<"0\n"; return 0; } int i = 1; int m = 1; vector<tuple<int, int, int>> res; b[n+1] = b[1]; res.push_back({1, 1, 2}); while(s--){ int x; cin>>x; for(; i<x; i++){ if(b[n+m][i]==true){ res.push_back({3, i, 0}); b[n+m+1] = ~b[i]; res.push_back({2, n+m, n+m+1}); b[n+m+2] = b[n+m] & b[n+m+1]; m+=2; } } if(b[n+m][x]==false){ res.push_back({1, n+m, x}); b[n+m+1] = b[n+m] | b[x]; m++; } i++; } for(; i<=n; i++){ if(b[n+m][i]==true){ res.push_back({3, i, 0}); b[n+m+1] = ~b[i]; res.push_back({2, n+m, n+m+1}); b[n+m+2] = b[n+m] & b[n+m+1]; m+=2; } } cout<<m<<"\n"; for(auto [a, b, c] : res){ if(a!=3)cout<<a<<" "<<b<<" "<<c<<"\n"; else cout<<a<<" "<<b<<"\n"; } return 0; } |
English