01Trie
01Trie 是一种基于 Trie字典树 上的数据结构,是一种解决关于异或类问题的数据结构。 01Trie 的本质就是把每个数变成二进制串再放到字典树上,在贪心求解。 把每一个数转化成 31 位二进制,想让它的异或值最大,那就是让 0 尽量遇到 1,1 尽量遇到 0。所以就要从最高位开始,尽可能的让这个数的在二进制下的每一位都与枚举的数不同,如果不能满足,那就相同。 实现就是把每一个...
01Trie 是一种基于 Trie字典树 上的数据结构,是一种解决关于异或类问题的数据结构。 01Trie 的本质就是把每个数变成二进制串再放到字典树上,在贪心求解。 把每一个数转化成 31 位二进制,想让它的异或值最大,那就是让 0 尽量遇到 1,1 尽量遇到 0。所以就要从最高位开始,尽可能的让这个数的在二进制下的每一位都与枚举的数不同,如果不能满足,那就相同。 实现就是把每一个...
并查集是一种非常高效的树形数据结构,其可以在接近 O1 的时间复杂度来做到合并,查询一些关于一些数据之间的关系的问题。 以下内容中,fax表示节点 x 的父节点。 以板题为例,其实就是有 n 个节点,操作就是让你把这些的所在的集合合并或者查询是否在一个集合中。 我们可以把每一个节点在刚开始的时候定义为一个独立的点,且为一个集合的根,即 fax=x。 初始化搞定了,考虑查询节点 x ...
单调队列是一个类似于单调栈的知识点,都是通过维护单调性用 On 的时间求解前面的数据对后面的数据没有影响的问题。 和单调栈差不多,但是单调队列使用的是栈而不是队列。其中使用队头来维护数据,队尾来维护单调性。 对于P1886 【模板】单调队列 / 滑动窗口https://www.luogu.com.cn/problem/P1886,可以使用单调队列维护下标,因为用值不可以知道下标,但用下...
单调栈是一种通过维护单调性用 On 的时间求解前面的数据对后面的数据没有影响的问题。 顾名思义,单调栈其实就是一个栈,手写和 STL 都可以。 写单调栈,首先要确定这个栈是要单调递增还是单调递减。 一个单调栈的模板题:求一个长度为 n 的序列中每一个数的左边第一个比它小的数,如果没有,则输出 0。其中 n\le 10^6。 发现这个题目如果每一次暴力去查找的话,时间复杂度是 On^...