上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 21 下一页
摘要: 前置知识: 普通主席树,树状数组 大概 待修主席树 和静态的一样 只不过还要加一颗树 来维护你修改的值 这棵树就是是树状数组,每个节点上再维护一颗动态开点线段树 (就是所说的树套树,不过没啥可怕的,就是麻烦一丢丢) 查询的时候老样子 不过要多加上树状数组中的值罢了 代码还算好些,如果 主席树,树状数 阅读全文
posted @ 2018-12-11 21:58 ComplexPug 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 思路 若opt=1 则为操作1,之后有三个数l,r,k 表示查询k在区间[l,r]的排名 若opt=2 则为操作2,之后有三个数l,r,k 表示查询区间[l,r]内排名为k的数 若opt=3 则为操作3,之后有两个数pos,k 表示将pos位置的数修改为k 若opt=4 则为操作4,之后有三个数l, 阅读全文
posted @ 2018-12-11 12:28 ComplexPug 阅读(259) 评论(0) 推荐(0) 编辑
摘要: [TOC] 思路 每个节点维护一课线段树(当然是动态开点) 线段树的作用是统计这个节点有多少种粮食型号,以及最多的粮食型号 然后树上差分,u和v点 +1,lca(u,v)和f[lca(u,v)] 1(不显然就画图喽) 并不用转化为dfs序 只需要dfs一边,自底向上合并就好 优化 删除节点不必建树 阅读全文
posted @ 2018-12-10 21:53 ComplexPug 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 题目链接 "luogu" 思路 可以说是线段树合并的练手题目吧 也没啥说的,就是dfs,然后合并、、、 看代码吧 错误 和写主席树错的差不多 都是变量写错、、、、 代码 cpp include define FOR(i,a,b) for(int i=a;i'9'||s='0'&&s t[maxn]; 阅读全文
posted @ 2018-12-10 16:33 ComplexPug 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 顾名思义 就是两颗线段树合成一个线段树 那合成的线段树是适合所有线段树吗 当然不是,是动态开点线段树 建树 这里建n个节点的时候,每个节点建一棵树 而且要按照一定的形态建立一条链 就是说如果最终形态是有n个数字的树, 那你初始化的那一条链子一定是这颗树上扣下来的 这样才方便合并 merge操作 最重 阅读全文
posted @ 2018-12-10 14:20 ComplexPug 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 思路 这里的初始化就不讲了,看完操作讲解就应该明白了,再不行就去看代码 对于操作1 由于操作2的需要,vector[n]存下数 对于操作2的维护 查询相邻两个元素的之间差值(绝对值)的最小值 先把所有答案存入一个小头堆里 比如 a,c之间你要插入b 那么,你就要删除|c a|,然后加入|a b|,| 阅读全文
posted @ 2018-12-10 10:19 ComplexPug 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 思路 并查集+fhqtreap 合并的时候由于是大小不一,所以不能直接合并 所以我们就暴力合并喽 对,就是那种很暴力的把小的往大的身上靠 他们说是启发式合并 抄一波博客 然后不就A了 错误 合并写的没毛病呀,最后看着题解改了改就过了? 明明差不多 代码 cpp // luogu judger ena 阅读全文
posted @ 2018-12-09 21:40 ComplexPug 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 思路 终于做了一个简单题,233 先对区间拍个序 因为他说所有区间互不包含 所以排序之后可以双指针l,r指呀指 容易得到 这样每个值最多插入删除一边 一次操作logn 总复杂度nlogn 代码 cpp include define FOR(i,a,b) for(int i=a;i'9'||s='0' 阅读全文
posted @ 2018-12-09 17:10 ComplexPug 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 思路 一开始写fhq treap 感觉越写越感觉splay好些,就去splay 然后维护序列 注意前驱后继的不存在的情况 但不用插入虚拟节点(那插入岂不太麻烦) 跑的真慢的一批,splay太多了 错误 好多错误 只好对拍 代码 cpp //这个题用treap似乎小题大做了,所以我用splay inc 阅读全文
posted @ 2018-12-09 16:28 ComplexPug 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 思路 超级恶心的pushdown 昏天黑地的调 让我想起了我那前几个月的线段树2 错误 这恶心的一道题终于过了 太多错误,简直说不过来 pushup pushdown 主要就是这俩不太清晰,乱pushdown 其他的写的还没啥毛病(能看出来) 代码 cpp include include inclu 阅读全文
posted @ 2018-12-08 09:57 ComplexPug 阅读(112) 评论(0) 推荐(0) 编辑
摘要: [TOC] 前言 其实我感觉俩就够了,lmc还得让学替罪羊 旋转维持 分裂维护 拍扁维护 齐全了 "请点击ikka大爷的讲解" 我不会指针,所以数组模拟、、 回收可真麻烦,看来以后还得学指针那 感觉写完就会弃掉 updat:不是感觉,是一定,怎么我感觉比splay还麻烦 要点||摘录 好像就是一颗普 阅读全文
posted @ 2018-12-06 19:27 ComplexPug 阅读(167) 评论(0) 推荐(0) 编辑
摘要: [TOC] 题目 "luogu" 思路 每次都是插入比之前所有数字大的数,所以之前的答案就不会改变 用fhq treap求出原序列,然后用树状数组依次算出每个值得lis(显然g[i]=g[i j]+1) 然后答案就是前i个得最大值(答案一定是不降的) 这里具体讲一下fhq treap 如果你还是维护 阅读全文
posted @ 2018-12-04 16:56 ComplexPug 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 思路 splay确实有点绕 还是fhq treap牛逼啊,构造完美二叉树(他们说笛卡尔树),就不用rand的,直接计算就好 时间也不慢 代码 cpp] include define FOR(i,a,b) for(int i=a;i'9'||s='0'&&sr) return 0; int mid=( 阅读全文
posted @ 2018-12-01 20:26 ComplexPug 阅读(116) 评论(0) 推荐(0) 编辑
摘要: [TOC] 可持久化fhq treap 支持查询历史版本的非旋treap luogu扣图: 先看看为啥他可以可持久化 由于fhq Treap是没有旋转操作的 所以每次操作后的其它没有操作的节点间的关系不变 而有旋转平衡树是要改变的,所以就不大能进行可持久化了 过程 回想,主席树的方法: 每次用log 阅读全文
posted @ 2018-12-01 14:33 ComplexPug 阅读(442) 评论(0) 推荐(0) 编辑
摘要: [TOC] 题目 "luogu" csdn好像限制了展开博客次数,真的好xx 思路 显然一段区间内的值一定是他的中位数 少一点比多一点好 然后就可以枚举区间了 区间答案为 val[mid] 小于val[mid]的+大于val[mid] val[mid]的所有值 就是size[x] val[mid] 阅读全文
posted @ 2018-12-01 06:49 ComplexPug 阅读(152) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 21 下一页