#define _CRT_SECURE_NO_WARNINGS
#include "cstdio"
class tree
{
	struct node {
		node *left;
		node *right;
		int w;
	};
	node *root;
	node* subtree(int n, int *tab)
	{
		node *res = new node();
		res->w = -1;
		if (n == 0)
		{
			res->w = *tab;
			return res;
		}
		res->left = subtree(n - 1, tab);
		res->right = subtree(n - 1, tab + (1<<  (n - 1)));
		return res;
	}
	void print(node *no)
	{
		if (no->w > 0)
			printf("%d ", no->w);
		else
		{
			print(no->left);
			print(no->right);
		}
	}
	void toss(node *no)
	{
		
		if(no->w<0)
		{
			toss(no->left);
			toss(no->right);
			node *tmp=no->left;
			no->left=no->right;
			no->right=tmp;
		}
	}
	void free(node *no)
	{
		if(no->w==-1)
		{
			free(no->left);
			free(no->right);
		}
		delete no;
	}
public:
	
	~tree()
	{
		
	}
	tree(int n, int *tab)
	{
		root = new node();
		root->w=-1;
		root->left = subtree(n - 1, tab);
		root->right = subtree(n - 1, tab + (1 << (n - 1)));
	}
	void print()
	{
		print(root);
	}
	void toss()
	{
		toss(root);
	}
};
int main(void) {
	int n, t;
	scanf("%d %d", &n,&t);
	int pow = 2;
	for (int i = 1; i < n; ++i)
		pow *= 2;
	int *tab = new int[pow];
	for (int i = 0; i < pow; ++i) {
		int a;
		scanf("%d", &tab[i]);
	
	}
	tree *drzewo = new tree(n,tab);
	if(t%2)drzewo->toss();
	drzewo->print();
	delete drzewo;
	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 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 | #define _CRT_SECURE_NO_WARNINGS #include "cstdio" class tree { struct node { node *left; node *right; int w; }; node *root; node* subtree(int n, int *tab) { node *res = new node(); res->w = -1; if (n == 0) { res->w = *tab; return res; } res->left = subtree(n - 1, tab); res->right = subtree(n - 1, tab + (1<< (n - 1))); return res; } void print(node *no) { if (no->w > 0) printf("%d ", no->w); else { print(no->left); print(no->right); } } void toss(node *no) { if(no->w<0) { toss(no->left); toss(no->right); node *tmp=no->left; no->left=no->right; no->right=tmp; } } void free(node *no) { if(no->w==-1) { free(no->left); free(no->right); } delete no; } public: ~tree() { } tree(int n, int *tab) { root = new node(); root->w=-1; root->left = subtree(n - 1, tab); root->right = subtree(n - 1, tab + (1 << (n - 1))); } void print() { print(root); } void toss() { toss(root); } }; int main(void) { int n, t; scanf("%d %d", &n,&t); int pow = 2; for (int i = 1; i < n; ++i) pow *= 2; int *tab = new int[pow]; for (int i = 0; i < pow; ++i) { int a; scanf("%d", &tab[i]); } tree *drzewo = new tree(n,tab); if(t%2)drzewo->toss(); drzewo->print(); delete drzewo; return 0; } | 
 
            
         English
                    English