UVA11997
考虑一个简化版,P1631,这个版本使用堆维护即可。
这个版本怎么做呢?依次合并每一行。
P6033
有一个性质,就是每一次合成出来的都是单调递增的,所以每次取出合的和没和的的最小的两个互相比较即可。
但是要预先排序,桶排即可。
P9565
考虑维护 \(60\) 个并查集,也就是维护对于每一位的连通性,然后判断是否有一条路径就是判断
\[\sum_{i=0}^{59} 2^i\operatorname{connected}(u,v) \geq V \]但是实际上我们不是这么做的,而是考虑在二进制下,去除两者二进制的 \(\operatorname{LCP}\) 以后是否 \(val\) 的最高位是 \(1\),但是 \(V\) 的是 \(0\)。
P6812
维护差分数组即可,先辈就是非严格单调递增序列,查询区间最小值即可,都是线段树基本操作。
P5522
你发现一件事情,\(n=1\) 可以使用无敌的线段树解决,\(n \le 30\) 其实可以用 \(30\) 棵线段树解决。
但是线段树常数过大,于是我们开了树状数组,因此直接干掉!
SP1716
妙妙题。
最大连续子段和的分治做法拍到线段树上即可。
CF1073D
转圈,转圈,转圈圈!
转一圈,取模,转一圈,取模。
取模至少减半,所以复杂度是对的。
P8306
板子。
P4551
发现一条路径就是两点到根的异或和的异或值。
所以拍一个 01-trie 求个最大异或对即可。
P6587
难题。
有两种做法,一种是根号分治,另外一种就是转完二进制以后,发现所操作的区间在 01-trie 上是一个子树,不过这颗 01-trie 需要二进制翻转以后建。
那么子树加,子树和。
把树拍平了,就是区间修改区间查询了。
P9364
限制是很强的。
你发现长度大于 \(450\) 的明显没用了,你发现按照长度排序一下,暴力即可。
标签:取模,专题,进阶,二进制,线段,异或,01,即可,数据结构 From: https://www.cnblogs.com/acwing-gza/p/17743420.html