From 8a44704bdd0f5e1c23968f70800fa682909b6ae6 Mon Sep 17 00:00:00 2001 From: unlockable Date: Sun, 8 Oct 2023 00:28:37 +0800 Subject: [PATCH] AC! --- 2023202/main.cpp | 130 ++++++++++------------------------------------- 1 file changed, 28 insertions(+), 102 deletions(-) diff --git a/2023202/main.cpp b/2023202/main.cpp index 9c3dabb..cc4e7cf 100644 --- a/2023202/main.cpp +++ b/2023202/main.cpp @@ -1,121 +1,47 @@ #include -template class Node { -private: - E content; - Node *next; - -public: - Node(const E &_content) : content(_content), next(this){}; - Node(const E &_content, Node *nextPtr) - : content(_content), next(nextPtr){}; - void setNext(Node *_ptr) { - this->next = _ptr; - } - E &getContent() { - return this->content; - } - Node *getNextPtr() { - return this->next; - } +struct Node{ + int prev, next; }; -template class Iterator { -private: - Node *current; - -public: - Iterator(Node *start) : current(start){}; - E &peekNext() { - return this->current->getNextPtr()->getContent(); - } - void next() { - this->current = this->current->getNextPtr(); - } - E &peek() { - return this->current->getContent(); - } - Node *peekNode() { - return this->current; - } - void insertHere(const E &newItem) { - this->current->setNext( - new Node(newItem, this->current->getNextPtr())); - } -}; - -template class List { -private: - // int _length; - Node head; - -public: - List(const E &dummyValue) - : head(Node(dummyValue)){ - // this->_length = 0; - }; - void insert(const E &target, const E &newItem) { - Iterator iter = Iterator(&this->head); - // Remember to add a loop to stop at length!!; - while (iter.peek() != target) { - iter.next(); - } - iter.insertHere(newItem); - // this->_length++; - } - void remove(const E &target) { - Iterator iter = Iterator(&this->head); - while (iter.peekNext() != target) { - iter.next(); - } - Node *toBeDeleted = iter.peekNode()->getNextPtr(); - iter.peekNode()->setNext(toBeDeleted->getNextPtr()); - delete toBeDeleted; - // this->_length--; - } - Iterator iterate() { - return Iterator(&this->head); - } -}; +Node map[100000]; int main() { - List aList(0); - aList.insert(0, 1); + map[0].prev = 1; + map[0].next = 1; + map[1].prev = 0; + map[1].next = 0; int n; int cmd, x, y; scanf("%d", &n); while (n) { scanf("%d %d", &cmd, &x); - switch (cmd) { - case 1: { - scanf("%d", &y); - aList.insert(x, y); - break; - } - case 2: { - Iterator iter = aList.iterate(); - while (iter.peek() != x) { - iter.next(); + switch(cmd) { + case 1: { + scanf("%d", &y); + map[y].prev = x; + map[y].next = map[x].next; + map[x].next = y; + map[map[y].next].prev = y; + break; + } + case 2: { + printf("%d\n", map[x].next); + break; + } + case 3: { + map[map[x].prev].next = map[x].next; + map[map[x].next].prev = map[x].prev; + break; } - printf("%d\n", iter.peekNext()); - break; - } - case 3: { - aList.remove(x); - } } n--; } - Iterator iter = aList.iterate(); - iter.next(); - while (true) { - int content = iter.peek(); - if (content == 0) { - break; - } - printf("%d\n", content); - iter.next(); + int cur = map[0].next; + while (cur != 0) { + printf("%d\n", cur); + cur = map[cur].next; } return 0; } \ No newline at end of file