可持久化
huanghongxun
这个作者很懒,什么都没留下…
展开
-
BZOJ 3674 可持久化并查集加强版 可持久化线段树
和BZOJ 3673一样。可以翻前一篇文章。不过内存问题省去了按大小合并。#include #include #include using namespace std;const int M = 200001;class PersistantArray { struct Node { int v; Node *lc, *rc; }原创 2015-12-30 21:51:54 · 687 阅读 · 0 评论 -
BZOJ 3218|UOJ 77|A + B Problem|最大流|可持久化线段树
吐槽A这题目真的很吸引人233。 样例不能复制真是可惜233。 题目的方格染色以及奇怪的节点让我想起了以前看过的一篇博文,讲最小割的。。 于是这道题就最小割。。。题解好吧假设我们不知道这道题要最小割,睁眼说瞎话 看着题目给的式子我们需要对它做♂点事情。 max⎧⎩⎨⎪⎪∑i黑bi+∑i白bi−∑i奇怪pi⎫⎭⎬⎪⎪ \max \left\{ \sum_{i黑}b_{i}+\sum_{i白}原创 2016-01-13 13:16:39 · 1734 阅读 · 0 评论 -
BZOJ 4546|CodeChef XRQRS|Xor Queries|可持久化Trie
#include const int N = 500005;struct Trie { Trie* c[2]; int size; Trie() { c[0] = c[1] = this; size = 0; } Trie(Trie *l, Trie *r, int sz) { c[0] = l, c[1] = r, size = sz; } void* ope原创 2016-04-27 15:02:32 · 710 阅读 · 0 评论 -
BZOJ 4539|HNOI 2016|树|可持久化线段树|LCA ******
待续。。#include <cstdio>#include <algorithm>using namespace std;const int N = 100005, M = N * 2;typedef long long ll;struct Seg { Seg *lc, *rc; int sz; ll sum; Seg() { lc = rc = this; sum = s原创 2016-04-24 23:58:57 · 546 阅读 · 0 评论 -
某主席树的的问题
Description给定一棵 N 个节点的树, 每个点 i 有权值 a[i] , 1 <= a[i] <= M . 有 Q 个询问, 对于询问 x,y,k , 分别输出树上从 x 到 y 的路径中, 权值小于/等于/大于 k 的点的数目.Solution恩。。权值线段树?还要判断区间,好吧上主席树咯。如果不在树上,那么查询[l,r]关于小于k的数目。我们对区间建立线段树,可持久化权值(不知道能不能原创 2016-02-13 12:40:27 · 932 阅读 · 0 评论 -
BZOJ 2588/SPOJ Count on a Tree LCA+线段树
问树上点对间的第k大。 对每个点维护到根的路径上的权值情况,分别建立权值线段树,为了压缩内存利用可持久化线段树即可。#include <cstdio>#include <algorithm>using namespace std;#define FOR(i,j,k) for(i=j;i<=k;++i)const int N = 100005, M = N, K = 16;struct S原创 2016-03-14 23:34:50 · 487 阅读 · 0 评论 -
BZOJ 3218 a + b Problem 最大流 + 可持久化线段树
这题目真的很吸引人233。题目的方格染色以及奇怪的节点让我想起了以前看过的一篇博文,讲最小割的。。于是这道题就最小割。。。先留个坑。。为什么别人的程序都这么快。。应该不是这么写的吧。。真的是痛苦。。各种脑抽写错,程序重写了2遍。。原来SegTree的缺省构造函数里面包括了自增id,然而operator new里面定义的大数组也会自增id。原创 2016-01-12 20:55:05 · 639 阅读 · 0 评论 -
BZOJ 3932 [CQOI2015]任务查询系统 可持久化线段树
以时间戳划分,每个时间点维护一个线段树,任务开始时在对应权值处+1,结束后-1就好啦。上可持久化线段树。感觉分配内存还是动态一大段一大段分比较好。。RE了才知道要调大数组。#include #include using namespace std;const int M = 100001;typedef long long ll;struct Tree { Tree *l原创 2016-01-04 21:35:56 · 510 阅读 · 0 评论 -
POJ 3580 SuperMemo Splay/可持久化Treap 维护区间
可持久化Treap这么长我选择go die#include #include using namespace std;int random() { static int base = 123456789; return base += (base << 2) + 1;}class PersistantTreap {private: struct Node { int v原创 2016-01-08 20:51:44 · 800 阅读 · 0 评论 -
BZOJ 3207 花神的嘲讽计划Ⅰ 可持久化线段树
给出一个序列,对于每个询问,求询问序列是否在原序列某区间内出现过。由于询问序列长度均为K,所以原序列可以hash成n-k+1个数,那么问题就转化为给出一个数,问在序列某区间内是否出现过。这种问题需要可持久化线段树。离散化写的我心碎。。#include #include #include #define FOR(i,j,k) for(i=j;i<=k;i++)#defin原创 2016-01-02 19:54:29 · 450 阅读 · 0 评论 -
BZOJ 2741 【FOTILE模拟赛】L 可持久化Trie 分块
题意在线求a[l,r]间最大连续子串xor和。题解我的程序竟然排Rank 6,不科学。。。 a[l,r]的xor和转化为b[l-1]^b[r] 那么问题转化为求b[l-1,r]的任意2个数的xor和的最大值。 如果一个数固定,那么就可以把问题转化为BZOJ 3261。 所以我们每n−−√\sqrt n取一个数,预处理出它到后面每个数的xor的最大值,比如对于a[n−−√]a[\sqrt n]原创 2016-01-02 14:00:46 · 669 阅读 · 0 评论 -
BZOJ 3261 最大异或和 可持久化Trie
败了败了。。题意很清楚了。只在队尾添加所以上Trie。a[l,r] xor结果在我程序中应该写的是trie[l-2], trie[r-1],然而我写了trie[l-1], trie[r]。。。WAWAWA。。。怎么感觉这个程序对可持久化Trie的包装很怪异,写的很不优雅。。所以参考了popoqqq神的模板。。函数式写法深入我心。#include const int N = 600原创 2015-12-29 21:25:29 · 733 阅读 · 0 评论 -
BZOJ 4103 [Thu Summer Camp 2015]异或运算 可持久化Trie
对矩阵求第k大xor值。注意到数据范围长宽严重失调(误所以对于每列维护可持久化Trie。然后查询就由BZOJ 3261推广一下就好啦。#include #include #include const int N = 1001, M = 300001;using namespace std;struct Trie { Trie* c[2]; int size;原创 2016-01-01 17:59:23 · 521 阅读 · 0 评论 -
BZOJ 3673 可持久化并查集 可持久化线段树
嘛。。可持久化数组实现可持久化并查集。。可持久化数组用可持久化线段树实现。。专门写了个包装好了的可持久化数组模板可用。自认为写法还是能看的。。完全将所有操作包装成了数组了,就差实现operator[]。。76ms挺慢的。。嘛,为了代码好看牺牲一点时间也值得。原创 2015-12-30 15:22:27 · 527 阅读 · 0 评论 -
计蒜客 26985 26986 26987 | 阿里巴巴的手机代理商 | 可持久化Trie
题目链接: https://nanti.jisuanke.com/t/26987题目大意实现一个程序,支持添加字符串,删除以某串为后缀的字符串,修改以某串为后缀的字符串为另一个后缀,查询以某串为后缀的字符串的个数,查询某个版本时以某串为后缀的字符串的个数。题解处理后缀的问题我们翻转字符串就变成处理前缀了。显然我们需要可持久化Trie实现。本篇只是贴板子。由于题目保证所有插...原创 2018-05-17 10:34:46 · 216 阅读 · 0 评论