cp-includes

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub rsalesc/cp-includes

:heavy_check_mark: utils/FastList.cpp

Depends on

Required by

Verified with

Code

#ifndef _LIB_FAST_LIST
#define _LIB_FAST_LIST
#include <bits/stdc++.h>

namespace lib {
  using namespace std;
namespace list {
template<typename T>
struct Node {
  T val;
  Node *next = nullptr, *prev = nullptr;
  Node() {}
  Node(T v) : val(v) {}

  void clear_links() {
    if(next != nullptr) next->prev = prev;
    if(prev != nullptr) prev->next = next;
    next = prev = nullptr;
  }
};

template<typename T>
void remove(Node<T>* no) {
  if(no != nullptr) no->clear_links();
}

template<typename T>
void append(Node<T>* no, Node<T>* nw) {
  assert(no != nullptr);
  remove(nw);
  if(no->next != nullptr) no->next->prev = nw;
  if(nw != nullptr) {
    nw->next = no->next;
    nw->prev = no;
  }
  no->next = nw;
}

template<typename T>
void prepend(Node<T>* no, Node<T>* nw) {
  assert(no != nullptr);
  remove(nw);
  if(no->prev != nullptr) no->prev->next = nw;
  if(nw != nullptr) {
    nw->prev = no->prev;
    nw->next = no;
  }
  no->prev = nw;
}
} // namespace list
} // namespace lib

#endif
#line 1 "utils/FastList.cpp"


#include <bits/stdc++.h>

namespace lib {
  using namespace std;
namespace list {
template<typename T>
struct Node {
  T val;
  Node *next = nullptr, *prev = nullptr;
  Node() {}
  Node(T v) : val(v) {}

  void clear_links() {
    if(next != nullptr) next->prev = prev;
    if(prev != nullptr) prev->next = next;
    next = prev = nullptr;
  }
};

template<typename T>
void remove(Node<T>* no) {
  if(no != nullptr) no->clear_links();
}

template<typename T>
void append(Node<T>* no, Node<T>* nw) {
  assert(no != nullptr);
  remove(nw);
  if(no->next != nullptr) no->next->prev = nw;
  if(nw != nullptr) {
    nw->next = no->next;
    nw->prev = no;
  }
  no->next = nw;
}

template<typename T>
void prepend(Node<T>* no, Node<T>* nw) {
  assert(no != nullptr);
  remove(nw);
  if(no->prev != nullptr) no->prev->next = nw;
  if(nw != nullptr) {
    nw->prev = no->prev;
    nw->next = no;
  }
  no->prev = nw;
}
} // namespace list
} // namespace lib
Back to top page