
可持久化数据结构
文章平均质量分 71
PoPoQQQ
这个作者很懒,什么都没留下…
展开
-
BZOJ 3744 Gty的妹子序列 分块+树状数组+可持久化线段树
题目大意:给定一个序列,多次求区间内逆序对个数 强制在线让我们呐喊一声:出题人卡常数丧心病狂!再来一次:出题人卡常数丧心病狂!!!!不强制在线的直接莫队就能搞 强制在线我是跪了QTZ首先看这数据范围肯定O(n√nlogn)了 我们分块 令cnt[i][j]为从第i块的开头起到第j个点这段区间的逆序对数这个用树状数组就可以O(n√nlogn)搞出来 我一开始直接用可持久化线段原创 2014-11-13 23:04:39 · 3658 阅读 · 7 评论 -
BZOJ 3489 A simple rmq problem 可持久化树套树
题目大意:给定一个序列,多次询问某一区间中出现且仅出现一次的最大的数令第i个数左侧第一个与这个数相同的数为last[i] 右侧第一个与这个相同的数为next[i]那么一个数a[i]在区间内出现一次当且仅当last[i]r&&l于是我们将元素按照last[i]排序并构建可持久化线段树 令pos为满足last[i]每次查询我要查询的是第pos个版本的线段树内所有next[i]>r的数中原创 2014-12-23 16:23:58 · 4035 阅读 · 4 评论 -
BZOJ 2527 Poi2011 Meteors 整体二分+线段树 / 可持久化线段树(MLE)
题目大意:给定一个环,每个节点有一个所属国家,k次事件,每次对[l,r]区间上的每个点点权加上一个值,求每个国家最早多少次操作之后所有点的点权和能达到一个值首先我们考虑暴力想法对于每个国家分开讨论 二分操作次数但是这样每次Judge的时候我们要模拟1~mid所有的操作 浪费在这里的复杂度实在太大这样做每个国家需要模拟O(klogk)次操作 时间复杂度O(nklogk) TLE我原创 2014-12-30 10:56:00 · 2025 阅读 · 0 评论 -
BZOJ 3772 精神污染 可持久化线段树
题目大意:给定一棵树和树上的m条路径,求这m条路径中任选两条不同的路径时其中一条包含另一条的概率是多少这题还真是精神污染- -首先一个显而易见的结论就是如果路径A包含于路径B 那么就有A的两端点在路径B上 这是个充要条件于是我们对于每个A路径的两段点x和y,将x开一个vector,把y存进去这样对于每个B路径 我们要找的就是B路径上的所有点在vector中有多少出边也在这条B路径上原创 2015-01-25 22:23:01 · 4296 阅读 · 0 评论 -
BZOJ 3658 Jabberwocky 可持久化线段树+分治
题目大意:给定平面上n个点,一共有k种颜色,要求选定一条线段,并选取线段正上方或正下方的所有点,要求不能出现所有颜色的点,求最多选择多少点正解是双向链表+树状数组?让我们来点优雅的做法由于不能出现所有颜色的点 因此一定有至少一种颜色不出现 我们可以枚举这个不出现的颜色现在我们搞出所有极大子矩形这个分治就好了。。。假设我们现在求的是一条线段下方的点 那么我们考原创 2015-03-20 16:36:28 · 2043 阅读 · 0 评论 -
BZOJ 3932 CQOI2015 任务查询系统 可持久化线段树
题目大意见http://pan.baidu.com/s/1o6zajc2主席树裸上就好了。。。#include #include #include #include #define M 100100using namespace std;struct Segtree{ Segtree *ls,*rs; int size; long long sum; void* op原创 2015-04-07 14:35:50 · 2654 阅读 · 0 评论 -
BZOJ 4026 dC Loves Number Theory 分块+十字链表/可持久化线段树
题目大意:给定一个序列,多次询问某段区间乘积的φ\varphi值对10007771000777的模我竟然卡过去了233333 将序列分块,记录fi,jf_{i,j}表示第ii块左端点到第jj个点中出现的所有质数pp的p−1p\frac{p-1}p之积 每次询问[x,y][x,y],首先取出[x,y][x,y]区间内所有数的积,然后乘上fst,yf_{st,y}(其中stst是xx后面第一个块端点原创 2015-04-30 16:19:58 · 2550 阅读 · 0 评论 -
BZOJ 4103~4105 THUSC2015 题解
T1:BZOJ 4013 xor 题目大意:给定一个长度为nn的数列aa和一个长度为mm的数列bb,给定矩阵AA,令Ai,j=ai⊕bjA_{i,j}=a_i\oplus b_j,qq次询问某个子矩形里的kk大值 n≤1000,m≤3∗105,q≤500n\leq 1000,m\leq 3*10^5,q\leq 500刚看到这题的时候我发现我不会,看到数据范围的时候我发现出题人也不会…… 如果原创 2015-06-03 17:55:51 · 4086 阅读 · 2 评论 -
BZOJ 4260 Codechef REBXOR 可持久化Trie树
题目大意:给定一个长度为nn的序列,求1≤l1≤r1<l2≤r2≤n1\leq l_1\leq r_1<l_2\leq r_2\leq n使得(⊕r1i=l1ai)+(⊕r2i=l2ai)(\oplus_{i=l_1}^{r_1}a_i)+(\oplus_{i=l_2}^{r_2}a_i)最大,输出这个最大值傻逼题…… 求前缀和,问题转化成了求0≤l1<r1≤l2<r2≤n0\leq l_1< r原创 2015-09-22 17:08:18 · 2351 阅读 · 0 评论 -
BZOJ 3551 ONTAK2010 Peaks加强版 Kruskal重构树+可持久化线段树
题目大意:同3545 强制在线3545题解传送门:http://blog.youkuaiyun.com/popoqqq/article/details/40660953强制在线没法排序 启发式合并也就用不了了Kruskal重构树是个挺好玩的东西 可以拿来处理一些最小生成树的边权最值问题这里我们Kruskal连边时并不直接连边 而是新建一个节点ext 将两个点所在子树都连到ext的儿子上比如原创 2014-11-21 14:40:10 · 4706 阅读 · 3 评论 -
BZOJ 3166 HEOI2013 Alo 可持久化Trie树
题目大意:给定一个不重复的序列a,在a中任选一个区间,求区间内的次大值与区间内的任意一个其它数的最大的异或值首先我们枚举次大值 对于一个次大值 它可能选择的另一个数的取值范围为(l,r) 其中l为这个数左侧第二个比它大的数 r为这个数右侧第二个比它大的数在这个区间内的Trie树中贪心寻找最大值即可这个区间怎么求呢?我们维护一棵平衡树 将数从大到小将下标加进平衡树 每加进一个下标 比它大原创 2014-10-21 11:28:45 · 1638 阅读 · 0 评论 -
BZOJ 3673 可持久化并查集 by zky 可持久化并查集
题目大意:给定n个集合,提供三种操作:1.合并a,b所在集合2.回到第k次操作之后的状态3.询问a,b是否在同一集合可持久化并查集0.0 实现方式是用可持久化线段树实现可持久化数组维护可持久化并查集。。。至于可持久化数组,每条路径上只有叶节点的位置的num域是有意义的,感觉无比浪费0.0 可是不这样还真没法维护0.0合并时本来应该按照每个节点的深度之和维护,结果手残懒得写,原创 2014-10-20 18:39:50 · 2207 阅读 · 0 评论 -
BZOJ 3261 最大异或和 可持久化Trie树
题目大意:给定一个序列,提供下列操作:1.在数组结尾插入一个数2.给定l,r,x,求一个l首先我们可以维护前缀和 然后就是使x^sum[n]^sum[p-1]最大x^sum[n]为定值,于是用Trie树贪心即可考虑到l-1每个区间[l,r]的Trie树为tree[r]-tree[l-1]注意0要插入一个数字0,所以把-1作为空节点,然后把数组向前推进一位即可#inc原创 2014-10-14 09:46:25 · 3303 阅读 · 0 评论 -
BZOJ 2588 Count on a tree 主席树+倍增LCA
题目大意:给定一棵树,每个节点有权值,询问两个节点路径上的权值第k小这题很卡时间。。。树链剖分+二分+树套树的O(nlog^4n)做法可以去死了没有修改操作,树链剖分+二分+划分树O(nlog^3n),还是死了我怒了,裸学了一发可持久化线段树(不看任何代码OTZ,我是怎么做到的0.0),二分+主席树,O(nlog^2n),居然还是死了!最后发现我SB了,完全没有必要二分,直原创 2014-10-13 16:56:56 · 2636 阅读 · 0 评论 -
BZOJ 3439 Kpm的MC密码 Trie树+可持久化线段树
题目大意:给定n个字符串,对于每个字符串求以这个字符串为后缀的字符串中第k小的编号首先将字符串反转 那么就变成了对于每个字符串求以这个字符串为前缀的字符串中第k小的编号然后考虑对字符串排序 那么对于每个字符串以它为前缀的字符串一定是连续的 那么就转化成了区间第k小 这个用可持久化线段树可以解决排序自然不能直接排 既然是字符串 考虑Trie树+DFS即可 注意字符串有重复的 小心#i原创 2014-11-17 12:52:26 · 2244 阅读 · 0 评论 -
BZOJ 3207 花神的嘲讽计划I Hash+可持久化线段树/划分树
题目大意:给定一个数字串,多次求某个区间内有没有一个长度为k的子串首先对字符串进行哈希 然后问题就转化成了求一个区间内有没有某个数可持久化线段树即可 其实我觉得划分树会更快一些 可以写写※注意事项:1.n2.哈希值用unsigned long long 铁则 unsigned int 会被卡掉3.线段树那里直接x+y>>1会爆unsigned long long 转原创 2014-10-19 14:55:25 · 2089 阅读 · 0 评论 -
BZOJ 3123 SDOI2013 森林 可持久化线段树+倍增LCA+启发式合并
题目大意:给定一棵森林,每个点有权值,提供两种操作:1.查询两点间路径上第k小的权值2.将两个点之间连一条边 保证连接后仍是一座森林可持久化线段树部分同Count On A Tree 只是这道题加了个连接操作对于连接操作我们要用到启发式合并 就是把小的那棵树暴力重建 很简单的一个操作但是可以证明是均摊O(nlogn)的大小我用了并查集 其实记录根就可以了此外本题的多组数据是原创 2014-10-20 11:38:16 · 2231 阅读 · 0 评论 -
BZOJ 3674 可持久化并查集加强版 可持久化并查集
题目大意:同3673 强制在线同3673 只不过慢了一些0.0这道题只写路径压缩比只写启发式合并要快一点点 两个都写就慢的要死0.0改代码RE的可能是内存不够#include#include#include#include#define M 200200using namespace std;struct Tree{ Tree *ls,*rs; int num;}原创 2014-10-20 18:45:24 · 1981 阅读 · 0 评论 -
BZOJ 2741 【FOTILE模拟赛】L 分块+可持久化Trie树
题目大意:给定一个序列,多次询问[l,r]中最大子序异或和 强制在线一直RE的同学注意,本题的强制在线如果直接加会爆int导致调用数组下标为负首先我们有一个转化 维护前缀异或和数组a[] 那么[l,r]中最大子序异或和就是a数组中[l-1,r]中任取两个数的最大异或值然后分块处理 对于每块的第一个数a[i] 我们依次处理出对于所有的j>=i的[i,j]中的最大异或值 即s[i][j]=原创 2014-10-21 09:54:35 · 2507 阅读 · 0 评论 -
BZOJ 2653 middle 二分答案+可持久化线段树
题目大意:给定一个长度为n的序列,求当子序列s的左端点在[a,b],右端点在[c,d]时的最大中位数其中当序列长度为偶数时中位数定义为中间两个数中较大的那个很难想的一道题 具体题解见 http://blog.youkuaiyun.com/acm_cxlove/article/details/8566093 说的很详细区间处理那里 [b,c]是必选的 [a,b)和(c,d]每段取最大加和 否则re恒原创 2014-10-20 16:48:17 · 1657 阅读 · 0 评论 -
BZOJ 3218 a + b Problem 可持久化线段树+最小割
题目大意:。。。自己看从源点出发,分别向汇点连两条流量为a和b的边,跑最大流即是a+b。代码:#include #include #include #include #define M 10#define S 1#define T 2#define INF 0x3f3f3f3fusing namespace std;struct abcd{ int to,f,nex原创 2015-01-09 17:06:55 · 3787 阅读 · 5 评论