Pagini recente » Cod sursa (job #2243087) | Cod sursa (job #231388) | Cod sursa (job #2174869) | Cod sursa (job #897657) | Cod sursa (job #3153953)
#include <bits/stdc++.h>
#pragma GCC optimize ("O3")
#pragma GCC target ("popcnt")
using namespace std;
const int MAX_N = 100000;
int n, m, st, dr, k, target, p[MAX_N + 5];
int main (){
ios_base::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
cin>>n;
///solve p
if(n % 2 == 1){
cout<<"NO\n";
}else{
cout<<"YES\n";
for(int i=1; i<=n; i++)
p[i] = i;
m = n;
while(n != 0){
k = (int)log2(n);
target = (1 << (k+1)) - 1;
st = target - n;
dr = n;
n = st-1;
while(st < dr){
swap(p[st], p[dr]);
st++, dr--;
}
}
n = m;
for(int i=1; i<=n; i++)
cout<<p[i]<<" ";
cout<<"\n";
}
///solve q
if(n < 6){
cout<<"NO\n";
}else if(n == 6){
cout<<"YES\n3 6 2 5 1 4";
}else if(n >= 7){
k = (int)log2(n);
if((1 << k) == n){
cout<<"NO\n";
}else{
cout<<"YES\n";
p[1] = 7, p[7] = 4, p[4] = 5, p[5] = 1;
p[2] = 3, p[3] = 6, p[6] = 2;
for(int pw2=3; pw2<=k; pw2++){
st = (1 << pw2);
dr = min((1<<(pw2+1)) - 1, n);
///cout<<st<<" "<<dr<<"\n";
for(int i=st; i < dr; i++)
p[i] = i+1;
p[dr] = st;
}
for(int i=1; i<=n; i++)
cout<<p[i]<<" ";
}
}
return 0;
}
/**
6
**/