数据结构
数据结构
单调栈(Monotone Stack)
常见模型:找出每个数左边离它最近的比它大/小的数
单调递增栈
保证栈内元素单调递增。(从栈顶到栈底)
- 只有比栈顶大的元素才能直接进栈
- 首先先将栈中比当前元素大的元素出栈
- 出栈时,新元素是出栈元素向后找第一个比其小的元素
- 所有出栈后,栈顶元素是新元素向前找第一个比其小的元素
- 再将当前元素出栈
1 | stack<int> st; |
单调递减栈
栈内元素递减
(同上)
单调队列
常见模型:找出滑动窗口中的最大值/最小值
1 | deque<Node> que; |
并查集
朴素并查集
1 | int p[N]; //存储每个点的祖宗节点 |
维护Size的并查集
1 | //p[]存储每个点的祖宗节点, size[]只有祖宗节点的有意义,表示祖宗节点所在集合中的点的数量 |
维护到祖宗节点距离的并查集
1 | int p[N], d[N]; |
KMP 字符串匹配
1 | // s[]是长文本,p[]是模式串,n是s的长度,m是p的长度 |
Trie树
1 | int son[N][26], cnt[N], idx; |
指针形式
1 | struct TrieNode{ |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XcloveHsy's Blog!