随笔分类 -  数据结构

摘要:我怎么能倒下,我身后空无一人。 阅读全文
posted @ 2022-02-07 16:58 fhq_treap 阅读(116) 评论(0) 推荐(0)
摘要:不动身的话就永远无法追寻,哪怕是休息也不会就此停下。 阅读全文
posted @ 2021-12-01 21:48 fhq_treap 阅读(29) 评论(0) 推荐(0)
摘要:黎明之前总有一段时间特别黑。 阅读全文
posted @ 2021-08-06 09:37 fhq_treap 阅读(48) 评论(0) 推荐(0)
摘要:一个很经典的做法。 $k$个最值的求法,先对每个元素进行最操作,再对堆顶进行次操作丢入堆。 考虑怎么进行次操作。 每次把可操作的区间按最操作的位置切开。 #include<iostream> #include<cstdio> #include<queue> #define ll long long 阅读全文
posted @ 2021-08-04 14:49 fhq_treap 阅读(48) 评论(0) 推荐(0)
摘要:考虑到一次答案就是两点的子树和乘积。 我们先维护一个整个大树。 用并查集做小树的情况,树剖做子树大小的维护。 #include<iostream> #include<cstdio> #define ll long long #define N 100005 ll n,q; struct P{ ll 阅读全文
posted @ 2021-08-04 11:17 fhq_treap 阅读(32) 评论(0) 推荐(0)
摘要:考虑我们需要维护的是这样一个东西。 即可能变化的只有每一行前$m - 1$个,和最后一列。 我们考虑对每一行开一个权值线段树,记录原本序列的第$x$个是否被一出,且用一个$vector$记录多出的部分。 那么很好维护的。 考虑内存的问题,我们用动态开点就行了。 #include<iostream> 阅读全文
posted @ 2021-08-03 21:21 fhq_treap 阅读(93) 评论(0) 推荐(0)
摘要:如果值域小一点。 那么我们有一个很精妙的做法。 分块完维护数字$cnt$,和一个$bitset$信息。 然而小不得。 那么我们考虑维护后缀$nxt_i$,表示第$i$位后,最近的$a_i + a_{nxt_i} = w$ 线段树维护。 考虑到我们对于所有的相同$nxt_i$,只有最后一个有效,那么我 阅读全文
posted @ 2021-08-01 12:53 fhq_treap 阅读(53) 评论(0) 推荐(0)
摘要:[HEOI2016/TJOI2016]排序 考虑二分答案,那么每次就要求出第$p$位上的数字大还是小。 考虑直接变换$01$来进行排序操作,那么直接用一个区间赋值,区间查询即可。 二分后通过$while$保证答案正确。 // Problem: P2824 [HEOI2016/TJOI2016]排序 阅读全文
posted @ 2021-07-29 14:13 fhq_treap 阅读(46) 评论(0) 推荐(0)
摘要:我们先考虑一下拿部分分: subtask1 考虑因为 \(n < 2k\) ,那么我们的划分一定是从中间某个地方裁开,且满足 \(k\) 的条件的,我们发现当划分点在 $[n\ mod\ k,k]$时满足条件,那么我们只需要维护一个前缀最大值和后缀最大值就好了。 for(int i = 1;i <= 阅读全文
posted @ 2021-07-16 13:08 fhq_treap 阅读(156) 评论(0) 推荐(2)
摘要:这玩意为啥是紫。 考虑对每个小于$x$的数值设为1,大于$x$的数值设为-1. 那么对于答案要求的就是绝对值最大的连续段。 线段树是很显然的。 考虑我们不能对每个数都进行一遍重构,这样就退化到了$O(n^2log)$ 我们对每个数的权值排序,那么更改操作变成了$O(nlog)$ 然后我们用线段树维护 阅读全文
posted @ 2021-07-01 11:46 fhq_treap 阅读(48) 评论(0) 推荐(0)
摘要:鸽了好久的题。 考虑先拍扁到一个序列上。 那么就是询问有多少个区间满足$max - min = r - l$ 考虑无法直接统计。 我们考虑对每个$r$来统计。 在$r$向右扩展的同时要维护的值$max,min,l,r$ 考虑到$r - l \leq max - min$ 那么如果我们不考虑常量$l$ 阅读全文
posted @ 2021-06-28 12:10 fhq_treap 阅读(55) 评论(0) 推荐(0)
摘要:不是很会做。 大概是以前没有见过这种trick的原因。 自己想到了线段树维护出现点数,但是不会统计答案。 先分析一些东西: 首先因为只有$m$个区间要被选,且答案贡献为$max - min$,可以考虑尺取。 感觉知道这个核心$trick$就能做了。 从小到大加入,线段树随便维护一下。 [NOI201 阅读全文
posted @ 2021-06-16 21:08 fhq_treap 阅读(61) 评论(0) 推荐(0)
摘要:一开始看错题目惹,导致错过了这题的关键$trick$ 考虑每次操作肯定都是一个$[k,n]$的,证明贪心一下就好了。 那么考虑记$f[i][k]$为前$i$个数用了$k$次。 那么只要满足$j < i \ and\ a_j + k_j ⇐ a_i + k_i \ and\ k_j < k_i$就能转 阅读全文
posted @ 2021-05-26 20:48 fhq_treap 阅读(53) 评论(0) 推荐(0)
摘要:看着$dp$标签进来的。 结果是个数据结构嘛。 这个对于每个人都维护一下子树里$sum ⇐ m$的最大人数就好了。 考虑贪心一下就不说了。从叶子节点往上合并堆,当然这种简单的合并操作,$stl$最好,跑得还很快。 [APIO2012]派遣 #include<iostream> #include<cs 阅读全文
posted @ 2021-05-26 20:18 fhq_treap 阅读(43) 评论(0) 推荐(0)
摘要:会找时间写一篇学习笔记的。 $Access$的操作是把$x$和$x$所在原树的顶端点的路径变为一个$splay$ 对于原树边我们有这样的操作,对每个$splay$的顶点维护一个父亲,认父不认子,其对应的是维护的这条链的顶端的父亲。 要求 \(Splay\) 中序遍历获得的节点序列是严格按照节点深度严 阅读全文
posted @ 2021-05-05 21:24 fhq_treap 阅读(151) 评论(0) 推荐(0)
摘要:平衡树维护序列的板子题。 用$fhqTreap$ 考虑在分裂时,用子树大小来分,因为我们相当要分裂出三个区间$[1,l - 1][l,r][r + 1,n]$这个区间是按$k_$分的,这个$k_$指的的坐标序列。 文艺平衡树 #include<iostream> #include<cstdio> # 阅读全文
posted @ 2021-04-19 12:25 fhq_treap 阅读(161) 评论(0) 推荐(0)
摘要:权值线段树合并裸题。 [HNOI2012]永无乡 #include<iostream> #include<cstdio> #define ll long long #define N 100005 ll head[N]; ll n,m; ll v[N << 5],ls[N << 5],rs[N << 阅读全文
posted @ 2021-04-18 14:13 fhq_treap 阅读(76) 评论(0) 推荐(0)
摘要:题就不放了 插入求相邻的最小值,实在平凡不说了。 考虑如何求最小的全局差,考虑每次答案的贡献都是由一个前缀和一个后缀组成,而且后缀的前缀和这个前缀的后缀是相同的二元组,每次插入元素查询一下前缀后缀,更新答案。 还是要学一下$mulset$以及$set$,省选里平衡树写的很慢。 #include<cs 阅读全文
posted @ 2021-04-12 11:43 fhq_treap 阅读(65) 评论(0) 推荐(0)
摘要:##简介: 快要省选了,现在啥也不会的菜鸡最后的挣扎 这个星期给自己的任务是搞懂网络流数据结构(我才不会说我网络流写累了) 这个星期的东西都更在这个贴里了 ##题目: 一: [AHOI2009] 维护序列 [AHOI2009] 维护序列 代码 #include<iostream> #include< 阅读全文
posted @ 2021-03-03 20:42 fhq_treap 阅读(88) 评论(0) 推荐(0)