Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define LINT long long int
- using namespace std;
- struct ListNode {
- int val;
- ListNode *left;
- ListNode *right;
- ListNode *pred;
- ListNode() : val(0), left(nullptr), right(nullptr), pred(nullptr){}
- ListNode(int x) : val(x), left(nullptr), right(nullptr), pred(nullptr) {}
- ListNode(int x, ListNode *left, ListNode *right, ListNode *pred) : val(x), left(left), right(right), pred(pred){}
- };
- vector<ListNode*> vc;
- void create_node(ListNode* head, int index, int s) {
- vc[index] = head;
- if (index * 2 <= s) {
- ListNode* left = new ListNode(index * 2, nullptr, nullptr, head);
- head->left = left;
- create_node(left, index * 2, s);
- }
- if (index * 2 + 1 <= s) {
- ListNode* right = new ListNode(index * 2 + 1, nullptr, nullptr, head);
- head->right = right;
- create_node(right, index * 2 + 1, s);
- }
- }
- ListNode* create_tree(int s) {
- if (s == 0)
- return nullptr;
- ListNode* root = new ListNode(1);
- create_node(root, 1, s);
- return root;
- }
- void print_node(ListNode* head) {
- if (head->left != nullptr)
- print_node(head->left);
- cout << head->val << ' ';
- if (head->right != nullptr)
- print_node(head->right);
- }
- int main()
- {
- int a;
- cin >> a;
- vc.resize(a + 1);
- ListNode* root = create_tree(a);
- int b;
- cin >> b;
- for (int i = 0; i < b; ++i) {
- int t;
- cin >> t;
- ListNode* v = vc[t];
- if (v->pred == nullptr)
- continue;
- ListNode* p = v->pred;
- if (p == root)
- root = v;
- v->pred = p->pred;
- if (p->pred != nullptr) {
- if (p->pred->right == p)
- p->pred->right = v;
- else
- p->pred->left = v;
- }
- p->pred = v;
- if (p->right == v) { // its right
- p->right = v->right;
- if (p->right != nullptr)
- p->right->pred = p;
- v->right = p;
- if (v->right != nullptr)
- v->right->pred = v;
- } else {
- p->left = v->left;
- if (p->left != nullptr)
- p->left->pred = p;
- v->left = p;
- if (v->left != nullptr)
- v->left->pred = v;
- }
- }
- print_node(root);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement