#include <bits/stdc++.h> using namespace std; #define INF 1010000000 #define EPS 1E-12 #define MP make_pair #define ST first #define ND second #define REP(i, n) for(int i = 0; i < (n); ++i) #define REPD(i, n) for(int i = (n) - 1; i >= 0; --i) #define FOR(i, a, n) for(int i = (a); i <= (n); ++i) #define FORD(i, a, n) for(int i = (a); i >= (n); --i) #define DD(x, args...) { vector<string> _v = _split(#args, ','); _err(x, _v.begin(), args); } #define D(args...) DD(", ", args) #define DE(args...) DD("\n", args) #define D2(a, args...) { cerr << a << ": "; D(args); } #define DD2(x, a, args...) { cerr << a << ": "; DD(x, args); } #define E cerr << endl; #define OUT(...) ostream &operator<<(ostream &ost, const __VA_ARGS__ &_cnt) { return _out(ost, ALL(_cnt)); } #define SZ(x) ((int)(x).size()) #define PB push_back #define EB emplace_back #define ALL(x) x.begin(), x.end() #define endl '\n' typedef long long LL; typedef unsigned long long ULL; typedef pair<int, int> PII; typedef pair<LL, LL> PLL; typedef pair<double, double> PDD; template<class c1> ostream &_out(ostream &ost, c1 a, c1 b); template<class T1, class T2> ostream &operator<<(ostream &ost, const pair<T1, T2> &_cnt); template<class T1> OUT(vector<T1>); template<class T1> OUT(deque<T1>); template<class T1> OUT(list<T1>); template<class T1, class T2> OUT(set<T1, T2>); template<class T1, class T2> OUT(multiset<T1, T2>); template<class T1, class T2, class T3> OUT(map<T1, T2, T3>); template<class T1, class T2, class T3> OUT(multimap<T1, T2, T3>); template<class T1, class T2> ostream &operator<<(ostream &ost, const pair<T1, T2> &_cnt) { return ost << '(' << _cnt.ST << ", " << _cnt.ND << ')'; } template<class T1> ostream &_out(ostream &ost, T1 a, T1 b) { ost << '{'; if(a != b) { ost << *a; while(++a != b) ost << ", " << *a; } return ost << '}'; } vector<string> _split(const string &s, char c) { int br = 0; vector<string> v(1); REP(i, SZ(s)) { if(s[i] == '[' || s[i] == '(' || s[i] == '{'/* || s[i] == '<'*/) br++; else if(s[i] == ']' || s[i] == ')' || s[i] == '}'/* || s[i] == '>'*/) br--; if(s[i] == c && br == 0) v.PB(""); else v.back().PB(s[i]); } return v; } template<class T1> void _err(string del, vector<string>::iterator it, T1 a) { bool wb = (*it)[0] == ' ', we = (*it).back() == ' '; cerr << it -> substr(wb, SZ(*it) - wb - we) << " = " << a << endl; (void)del; } template<class T1, class... Args> void _err(string del, vector<string>::iterator it, T1 a, Args... args) { bool wb = (*it)[0] == ' ', we = (*it).back() == ' '; cerr << it -> substr(wb, SZ(*it) - wb - we) << " = " << a << del; _err(del, ++it, args...); } ///////////////////////////////////////////////////////////////////// int main() { ios::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n >> k; k %= 2; n = 1 << n; vector<int> v(n); REP(i, n) cin >> v[i]; if(k) { REPD(i, n) cout << v[i] << ' '; cout << endl; } else { REP(i, n) cout << v[i] << ' '; cout << endl; } return 0; } /* 2 1 2 4 1 5 2 2 2 4 1 5 */
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | #include <bits/stdc++.h> using namespace std; #define INF 1010000000 #define EPS 1E-12 #define MP make_pair #define ST first #define ND second #define REP(i, n) for(int i = 0; i < (n); ++i) #define REPD(i, n) for(int i = (n) - 1; i >= 0; --i) #define FOR(i, a, n) for(int i = (a); i <= (n); ++i) #define FORD(i, a, n) for(int i = (a); i >= (n); --i) #define DD(x, args...) { vector<string> _v = _split(#args, ','); _err(x, _v.begin(), args); } #define D(args...) DD(", ", args) #define DE(args...) DD("\n", args) #define D2(a, args...) { cerr << a << ": "; D(args); } #define DD2(x, a, args...) { cerr << a << ": "; DD(x, args); } #define E cerr << endl; #define OUT(...) ostream &operator<<(ostream &ost, const __VA_ARGS__ &_cnt) { return _out(ost, ALL(_cnt)); } #define SZ(x) ((int)(x).size()) #define PB push_back #define EB emplace_back #define ALL(x) x.begin(), x.end() #define endl '\n' typedef long long LL; typedef unsigned long long ULL; typedef pair<int, int> PII; typedef pair<LL, LL> PLL; typedef pair<double, double> PDD; template<class c1> ostream &_out(ostream &ost, c1 a, c1 b); template<class T1, class T2> ostream &operator<<(ostream &ost, const pair<T1, T2> &_cnt); template<class T1> OUT(vector<T1>); template<class T1> OUT(deque<T1>); template<class T1> OUT(list<T1>); template<class T1, class T2> OUT(set<T1, T2>); template<class T1, class T2> OUT(multiset<T1, T2>); template<class T1, class T2, class T3> OUT(map<T1, T2, T3>); template<class T1, class T2, class T3> OUT(multimap<T1, T2, T3>); template<class T1, class T2> ostream &operator<<(ostream &ost, const pair<T1, T2> &_cnt) { return ost << '(' << _cnt.ST << ", " << _cnt.ND << ')'; } template<class T1> ostream &_out(ostream &ost, T1 a, T1 b) { ost << '{'; if(a != b) { ost << *a; while(++a != b) ost << ", " << *a; } return ost << '}'; } vector<string> _split(const string &s, char c) { int br = 0; vector<string> v(1); REP(i, SZ(s)) { if(s[i] == '[' || s[i] == '(' || s[i] == '{'/* || s[i] == '<'*/) br++; else if(s[i] == ']' || s[i] == ')' || s[i] == '}'/* || s[i] == '>'*/) br--; if(s[i] == c && br == 0) v.PB(""); else v.back().PB(s[i]); } return v; } template<class T1> void _err(string del, vector<string>::iterator it, T1 a) { bool wb = (*it)[0] == ' ', we = (*it).back() == ' '; cerr << it -> substr(wb, SZ(*it) - wb - we) << " = " << a << endl; (void)del; } template<class T1, class... Args> void _err(string del, vector<string>::iterator it, T1 a, Args... args) { bool wb = (*it)[0] == ' ', we = (*it).back() == ' '; cerr << it -> substr(wb, SZ(*it) - wb - we) << " = " << a << del; _err(del, ++it, args...); } ///////////////////////////////////////////////////////////////////// int main() { ios::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n >> k; k %= 2; n = 1 << n; vector<int> v(n); REP(i, n) cin >> v[i]; if(k) { REPD(i, n) cout << v[i] << ' '; cout << endl; } else { REP(i, n) cout << v[i] << ' '; cout << endl; } return 0; } /* 2 1 2 4 1 5 2 2 2 4 1 5 */ |