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