主席树
FSYo
我不去想是否能够成功,
既然选择了远方,
便只顾风雨兼程
展开
-
NOIP模拟19/07/06
WOJ4059 斐波那契每次贪心选出最长的一段, 枚举45个斐波那契数, 如果存在 fib[i] - 当前数 出现, 就不合法说一下我考场的做法预处理每个数右边第一个与它组成斐波那契的位置 r[i]可以单调队列优化如何判断呢? 如果合法, 那么(j+1 -- i) 区间的最小的r[i] 应该大于i, 写个st表就可以了#include<bits/stdc++....原创 2019-07-06 17:27:47 · 236 阅读 · 0 评论 -
P4770 [NOI2018]你的名字 [SAM+主席树]
传送门渐渐发现, 自己曾经认为的不可做题, 被一道一道地做了尽管机房盛行装菜, 但无论是我, 还是机房的伙伴, 都在一天一天地变强A了这道题, 可能也只有感动, 激动, 自豪能形容我的心情解题思路 :先考虑暴力我最原始的暴力 ----把 l -- r 之间的拿出来建SAM, 然后询问串的每一个后缀那上去跑, 终止位置记为 pos那么 i -- pos 这些都是出...原创 2019-07-15 09:55:12 · 229 阅读 · 2 评论 -
CF893F Subtree Minimum Query [主席树]
传送门比较容易想到, 按dep建主席树, 然后在dep[u]-1 ---- dep[u]+k区间的数中查询dfs序在st[u] -- ed[u] 之间的最小值我开始想, 最小值不满足区间减法怎么办, 然后又想, <= dep[u] - 1的点dfs序能在 st[u] --- ed[u] 之间吗?一个比较容易错的地方就是, 按dep建, 必须用一个vector把每层的点存下来一起建...原创 2019-07-10 17:10:52 · 321 阅读 · 0 评论 -
CF961E Tufurama [主席树]
传送门发现 a[i] >= j 对应的j的区间是 1 -- min(i-1, a[i])于是转换为求这个区间内, a[j] >= i 的个数, 于是主席树就可以了#include<bits/stdc++.h>#define N 200050using namespace std;int rt[N]; struct Node{int ls, rs, s...原创 2019-07-10 17:07:08 · 256 阅读 · 0 评论 -
近期刷题总结 [19 03 24]
目录CF14D Two Paths[树的直径]P3174 [HAOI2009]毛毛虫[树的直径]P2312 解方程[秦九韶算法]CF888D Almost Identity Permutations[ DP ]CF888G Xor-MST[0/1 trie]CF863D Yet Another Array Queries Problem[ splay 模板 ]...原创 2019-03-24 10:20:52 · 571 阅读 · 0 评论 -
近期刷题总结 [19 03 17]
目录P3703 [SDOI2017]树点涂色[LCT + 线段树]CF739B Alyona and a tree[主席树]P4098 [HEOI2013]ALO[双向链表 + 可持久化0/1trie]P5022 旅行[基环树]P1453 城市环路[基环树DP]CF837G Functions On The Segments[主席树]CF837D Round...原创 2019-03-17 15:16:14 · 697 阅读 · 0 评论 -
P4094 [HEOI2016/TJOI2016]字符串 [SA + 主席树]
传送门转换为判断,二分一个len,判断后缀起点在a -- b-mid+1 直接存不存在S,使lcp(S,c)>= len,我们发现rank[S] 一定在c左右的一个范围内, 我们二分这个范围,用主席树判断就可以了#include<bits/stdc++.h>#define N 100050using namespace std;int n,m,q;char...原创 2019-02-14 10:34:55 · 241 阅读 · 0 评论 -
[WOJ4379] 飘雪圣域 [主席树]
传送门每次询问点的个数是r-l+1, 那么联通块个数就是总点数减去边的个数考虑哪些边有贡献, 令边为l,r (l<r), 那么ql <= l < r <= qr 的边有贡献有时静态区间, 然后就是主席树#include<bits/stdc++.h>#define N 200050using namespace std;struct Nod...原创 2019-02-19 12:15:01 · 191 阅读 · 0 评论 -
P4755 Beautiful Pair [分治+主席树]
传送门我们枚举最大值的那个点pos, 然后枚举l-pos中的值, 在pos-r中查有多少个<= a[pos]/a[i]用主席树来完成(先离散化), 在序列随机的情况下O(nlogn^2)#include<bits/stdc++.h>#define N 100050#define LL long long#define Re registerusing nam...原创 2019-01-30 22:45:09 · 168 阅读 · 0 评论 -
[SCOI2016]美味 [主席树]
传送门我们按每一位贪心, 在主席树中找存不存在对异或有贡献的数就可以了#include<bits/stdc++.h>#define N 200050using namespace std;int read(){ int cnt=0,f=1;char ch=0; while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} w...原创 2019-02-08 16:38:48 · 154 阅读 · 0 评论 -
[SCOI2015]情报传递 [主席树]
传送门我们令一个人开始收集的时间为 ti, 当前时间为t那么答案就是路径上所有 ti < t - c 的人的个数, 如果没有修改的话, 可以用主席树但是要一边修改一边询问, 我最开始想到的是树链剖分+线段树套权值线段树后来发现, 如果我们一开始讲所有修改读入然后建主席树呢, 因为后面的修改一定不能作为当前的答案(ti 明显大于t)于是就是裸的模板了#include&...原创 2019-02-06 18:48:30 · 308 阅读 · 0 评论 -
P1533 可怜的狗狗 [主席树模板]
传送门#include<bits/stdc++.h>#define N 300050using namespace std;int a[N],b[N],n,m,rt[N],tot;struct Node{int l,r,siz;}t[N*40];int read(){ int cnt=0; char ch=0; while(!isdigit(ch))ch=getch...原创 2019-01-13 20:41:26 · 148 阅读 · 0 评论 -
森林[主席树启发式合并][树上主席树]
题目描述小Z有一片森林,含有N个节点,每个节点上都有一个非负整数作为权值。初始的时候,森林中有M条边。小Z希望执行T个操作,操作有两类:Q x y k查询点x到点y路径上所有的权值中,第k小的权值是多少。此操作保证点x和点y连通,同时这两个节点的路径上至少有k个点。 L x y在点x和点y之间连接一条边。保证完成此操作后,仍然是一片森林。为了体现程序的在线性,我们把输入数据进行了加...原创 2018-10-27 22:53:12 · 198 阅读 · 0 评论 -
任务查询系统[主席树]
题目描述最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分。超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi。同一时间可能有多个任务同时执行,它们的优先级可能相同,也可能不同。调度系统会经常向查询系统询问,第Xi秒正在运行的任务中,优先级最小的Ki个...原创 2018-10-24 23:35:05 · 217 阅读 · 0 评论 -
主席树模板
题目描述给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值输入样例#1: 5 525957 6405 15770 26287 26465 2 2 13 4 14 5 11 2 24 4 1输出样例#1: 640515770262872595726287主席树模板 #include<bits/stdc++.h>#de...原创 2018-10-17 20:46:31 · 141 阅读 · 0 评论 -
主席树
转载自https://www.cnblogs.com/zyf0163/p/4749042.html1.建树首先需要建立一棵空的线段树,也是最原始的主席树,此时主席树只含一个空节点,此时设根节点为rt[0],表示刚开始的初值状态,然后依次对原序列按某种顺序更新,即将原序列加入到对应位置。此过程与线段树一样,时间复杂度为O(nlogn),空间复杂度O(nlog(n))(笔者目前没有完全搞清究竟...转载 2018-10-17 20:07:22 · 264 阅读 · 0 评论