
主席树
丰川样子小孩姐
阿里嘎多扩赛以马斯
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【题解】LuoGu3168: [CQOI2015]任务查询系统
原题传送门 嗯,区间修改+单点求值 仅仅是这样的话,用线段树/树状数组维护差分数组的前缀和即可 不过,本题加强了难度,要求操作中前k小的值对点进行修改 想到对于每个点都维护一颗权值线段树,不过空间不允许如此奢侈 我们把差分思想和权值线段树结合起来,并且凭着优化空间的目的,想到用主席树维护差分数组的前缀和,询问用权值线段树搞一搞 Code: //感觉没什么好注释的,代码很好理解~~ #include...原创 2019-04-20 18:14:37 · 649 阅读 · 0 评论 -
[题解]LuoGu3567: [POI2014]KUR-Couriers
原题传送门 主席树入门题啦 主席树基础请先去打模板题 此题就是算出询问区间长度,然后记k=(r-l+1)/2 query的过程中,若左儿子的size>k,则递归左儿子 若右儿子的size>k,则递归右儿子 两者不存在否则关系,是并列的,若一波递归后无果,则返回0 Code: #include <bits/stdc++.h> #define maxn 500010 using...原创 2019-04-17 21:21:24 · 1153 阅读 · 1 评论 -
[题解]LuoGu2633:Count on a tree
原题传送门 主席树题~~ 把区间问题转移到了树上 怎么办呢? 想想主席树的特点 询问[l,r],采用第r棵树减去第l-1棵树 (前缀和思想) 树上有没有做这种问题的算法呢? 有!树上差分! 只要用u这棵树+v这棵树-lca这棵树-fa[lca]这棵树即可,其余的就是主席树模板了 至于为什么-lca-fa[lca]这个问题。。。树上差分维护点权因为lca也在内,不能把lca也减掉 还有,我的lca是...原创 2019-04-18 19:11:35 · 748 阅读 · 0 评论 -
[题解]LuoGu1801:黑匣子_NOI导刊2010提高(06)
原题传送门 虽说是堆题,但也可以用主席树不是? 对于每个要get的地方,相当于询问区间为[1,x],其实就是模板题啦 Code: #include <bits/stdc++.h> #define maxn 200010 using namespace std; int lc[maxn << 5], rc[maxn << 5], sum[maxn <<...原创 2019-04-18 21:28:59 · 644 阅读 · 0 评论 -
[题解]LuoGu3066:[USACO12DEC]逃跑的BarnRunning Away From…
原题传送门 此题简直一眼倍增// 对于每个点,往上倍增跳,找到那个最远的与自己距离小于等于l的点 那么这个点可以对自己到那个跳到的点那一段链上的点1的贡献 现在的问题是如何把自己和上面满足要求的最远的点之间一段点的答案都加上1 其实很简单,如果是一段序列上,区间加同一个数,然后最终单点求值是用差分数组做的 那么这道题我们就用树上差分(默认你会树上差分)即可,最终dfs一遍统计一下就好了 Code:...原创 2019-04-23 20:36:30 · 609 阅读 · 0 评论 -
[题解]LuoGu3919:【模板】可持久化数组(可持久化线段树/平衡树)
原题传送门 用主席树做啊 首先想到暴力,然后用主席树优化空间 每次比之前会多log个点,空间上还过得去 Code: #include <bits/stdc++.h> #define maxn 1000010 using namespace std; struct chairman{ int l, r, v; }seg[maxn << 5]; int rt[maxn], s...原创 2019-05-13 20:39:16 · 540 阅读 · 0 评论 -
[学习笔记]莫队->主席树
前身在这里,建议先看看这个 题1 主席树可以用来在线求区间不同的数的个数 记录last数组,last[i]表示上一个与第i位置上的数相同的数的位置 把主席树建出来,每次把last的位置加上-1,自己加上1 保证每个不同的数只出现1次 然后在线询问,每次只要询问l~r值之和就行了,因为每个数只出现过一次 这种方法,对比之前的树状数组做法,时间一样,空间多个log 不过主席树有个非常优的优点:在线 树...原创 2019-05-11 11:24:39 · 780 阅读 · 0 评论 -
【学习笔记】主席树
1、前置知识 线段树、权值线段树、前缀和思想等 2、引入 主席树模板题 约定: 后面将第k小/大说成kthkthkth 解决什么问题: 给定一段区间,静态求区间kthkthkth 想想方法: 暴力:对于每一个询问,排个序,就行了,时间复杂度O(nmlogn)O(nmlogn)O(nmlogn) 莫队+树状数组:树状数组可以求给定区间kthkthkth,使用二分+树状数组,具体不展开,但是多个区间...原创 2019-05-11 14:12:27 · 18736 阅读 · 23 评论