主席树
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 · 218 阅读 · 0 评论 -
P4770 [NOI2018]你的名字 [SAM+主席树]
传送门 渐渐发现, 自己曾经认为的不可做题, 被一道一道地做了 尽管机房盛行装菜, 但无论是我, 还是机房的伙伴, 都在一天一天地变强 A了这道题, 可能也只有感动, 激动, 自豪能形容我的心情 解题思路 : 先考虑暴力 我最原始的暴力 ---- 把 l -- r 之间的拿出来建SAM, 然后询问串的每一个后缀那上去跑, 终止位置记为 pos 那么 i -- pos 这些都是出...原创 2019-07-15 09:55:12 · 210 阅读 · 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 · 280 阅读 · 0 评论 -
CF961E Tufurama [主席树]
传送门 发现 a[i] >= j 对应的j的区间是 1 -- min(i-1, a[i]) 于是转换为求这个区间内, a[j] >= i 的个数, 于是主席树就可以了 #include<bits/stdc++.h> #define N 200050 using namespace std; int rt[N]; struct Node{int ls, rs, s...原创 2019-07-10 17:07:08 · 213 阅读 · 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 · 206 阅读 · 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 · 314 阅读 · 0 评论 -
P4094 [HEOI2016/TJOI2016]字符串 [SA + 主席树]
传送门 转换为判断,二分一个len,判断后缀起点在a -- b-mid+1 直接存不存在S, 使lcp(S,c)>= len,我们发现rank[S] 一定在c左右的一个范围内, 我们二分这个范围,用主席树判断就可以了 #include<bits/stdc++.h> #define N 100050 using namespace std; int n,m,q; char...原创 2019-02-14 10:34:55 · 204 阅读 · 0 评论 -
[WOJ4379] 飘雪圣域 [主席树]
传送门 每次询问点的个数是r-l+1, 那么联通块个数就是总点数减去边的个数 考虑哪些边有贡献, 令边为l,r (l<r), 那么ql <= l < r <= qr 的边有贡献 有时静态区间, 然后就是主席树 #include<bits/stdc++.h> #define N 200050 using namespace std; struct Nod...原创 2019-02-19 12:15:01 · 157 阅读 · 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 register using nam...原创 2019-01-30 22:45:09 · 149 阅读 · 0 评论 -
[SCOI2016]美味 [主席树]
传送门 我们按每一位贪心, 在主席树中找存不存在对异或有贡献的数就可以了 #include<bits/stdc++.h> #define N 200050 using 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 · 134 阅读 · 0 评论 -
[SCOI2015]情报传递 [主席树]
传送门 我们令一个人开始收集的时间为 ti, 当前时间为t 那么答案就是路径上所有 ti < t - c 的人的个数, 如果没有修改的话, 可以用主席树 但是要一边修改一边询问, 我最开始想到的是树链剖分+线段树套权值线段树 后来发现, 如果我们一开始讲所有修改读入然后建主席树呢, 因为后面的修改一定不能作为当前的答案(ti 明显大于t) 于是就是裸的模板了 #include&...原创 2019-02-06 18:48:30 · 269 阅读 · 0 评论 -
P1533 可怜的狗狗 [主席树模板]
传送门 #include<bits/stdc++.h> #define N 300050 using 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 · 130 阅读 · 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 · 182 阅读 · 0 评论 -
任务查询系统[主席树]
题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分。超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi。同一时间可能有多个任务同时执行,它们的优先级可能相同,也可能不同。调度系统会经常向查询系统询问,第Xi秒正在运行的任务中,优先级最小的Ki个...原创 2018-10-24 23:35:05 · 195 阅读 · 0 评论 -
主席树模板
题目描述 给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值 输入样例#1: 5 5 25957 6405 15770 26287 26465 2 2 1 3 4 1 4 5 1 1 2 2 4 4 1 输出样例#1: 6405 15770 26287 25957 26287 主席树模板 #include<bits/stdc++.h> #de...原创 2018-10-17 20:46:31 · 122 阅读 · 0 评论 -
主席树
转载自https://www.cnblogs.com/zyf0163/p/4749042.html 1.建树 首先需要建立一棵空的线段树,也是最原始的主席树,此时主席树只含一个空节点,此时设根节点为rt[0],表示刚开始的初值状态,然后依次对原序列按某种顺序更新,即将原序列加入到对应位置。此过程与线段树一样,时间复杂度为O(nlogn),空间复杂度O(nlog(n))(笔者目前没有完全搞清究竟...转载 2018-10-17 20:07:22 · 217 阅读 · 0 评论