trie树
文章平均质量分 51
pbihao
这个作者很懒,什么都没留下…
展开
-
【BZOJ 3689】异或之 trie+堆
以前做过类似的题目,不同的是把异或改成加法。。。。。。 还以为异或和加法没有太大的区别,把初始的几个数字放进优先队列里面,一个一个的取出来,得到次大值,再放进去,一直重复知道k个,至于找一个数和其他树异或的k大值可以用trie树轻松解决。 原因嘛,很显然对于每一个数经过我们构造出来的数字是单调递增的,然后放进堆里面每次保证取出堆里面的数字也是单调递增的(有点类似于dijkstra的样子,当时是原创 2017-01-15 20:42:15 · 456 阅读 · 0 评论 -
【BZOJ 3166】[Heoi2013]Alo 可持久化trie树+set
看到异或最大值容易想到trie树,至于区间异或最大值的话,可持久化一下就可以搞了。 至于满足次大值那个。。。 倒序排序权值,然后把它们的坐标插入set中,每一次lower_bound后找前继的前继和后驱就好了 #include #include #include #include #include #define maxn 50010 #define inf 0x3fffffff using原创 2017-01-19 21:22:22 · 216 阅读 · 0 评论 -
【BZOJ 4260】Codechef REBXOR 可持久化trie树
这道题用可持久化trie树到底是得有多慢,一开始我的方法是定义f[i]表示前i个数字作为一段区间的话的最大值,然后再倒着做一遍最后枚举i加起来更新一下ans就好了,我知道这样比较蠢,但复杂度应该也没多大影响吧,但是关键是我T了,郁闷。后来看博客发现大家的做法那个ff的预处理其实多余的,直接倒着枚举然后记录后面的最大值然后以当前i作为前一段的结尾最后一个依旧能够枚举完所有的情况。可是即便是这样,时间原创 2017-01-26 22:40:50 · 250 阅读 · 0 评论 -
【BZOJ 4103】[Thu Summer Camp 2015]异或运算 可持久化trie树
矩阵什么的不用管,就是a给一个区间,b给一个区间两两异或第k大,发现b很大a很小,就给b建一个可持久化trie树,顺便记下size以便于查询第k大。 对于每一次的询问,外层枚举位数,内层枚举A的每一个数,用结构体存下每一个A中的数对应的B的可持久化trie树的当前节点,然后分别就像查询一个数一样树上二分就好了。 #include #include #include #define maxm 3原创 2017-02-24 21:16:14 · 204 阅读 · 0 评论 -
【BZOJ 3439】Kpm的MC密码 主席树+trie树
所有的串都倒着插然后后缀变前缀,然后用主席树维护dfs序查询子树第k大就好了,唯一就是注意一下肯呢过有重复的串 #include #include #include #include #define maxn 100021 using namespace std; vectorg[maxn*20]; int ch[maxn*20][26],in[maxn],out[maxn],tot,cnt,c原创 2017-02-27 08:10:55 · 256 阅读 · 0 评论 -
【BZOJ 3439】Kpm的MC密码 主席树+trie树
所有的串都倒着插然后后缀变前缀,然后用主席树维护dfs序查询子树第k大就好了,唯一就是注意一下肯呢过有重复的串 #include #include #include #include #define maxn 100021 using namespace std; vectorg[maxn*20]; int ch[maxn*20][26],in[maxn],out[maxn],tot,cnt原创 2017-02-27 10:11:18 · 192 阅读 · 0 评论