随笔分类 -  数据结构

数据结构
摘要:https://www.luogu.com.cn/problem/P3332 Code: #include<bits/stdc++.h> #define fo(i, x, y) for(int i = x, _b = y; i <= _b; i ++) #define ff(i, x, y) for 阅读全文
posted @ 2020-08-09 16:42 Cold_Chair 阅读(249) 评论(0) 推荐(0)
摘要:https://gmoj.net/senior/#main/show/5067 题解: 考虑$[l,r]∩[x,y] \ne ∅$的充要条件是$max(l,x)\le min(r,y)$ 即$l \le y且 x \le r$ 那么每次相当于修改矩形内的点。 套上一个K-D tree,问题变成了: 阅读全文
posted @ 2020-08-08 11:30 Cold_Chair 阅读(300) 评论(0) 推荐(0)
摘要:https://csacademy.com/contest/archive/task/yurys-tree https://csacademy.com/submission/2761667/ 题解: kruskal重构树的$log^2$做法非常显然,这里就不讲了。 这里讲讲有根树的点分治做法。 依旧 阅读全文
posted @ 2020-08-02 22:48 Cold_Chair 阅读(318) 评论(0) 推荐(0)
摘要:https://loj.ac/problem/576 题解: 考虑询问了区间$[l,r]$,就知道了和,也就知道了$s[r]$和$s[l-1]$的差。 那么给$r$和$l-1$连一条边,我们相当于要搞出点为$0..n$的最小生成树。 运用kruskal的想法,每次找最小的连接不同联通块的边,发现一定 阅读全文
posted @ 2020-08-01 10:59 Cold_Chair 阅读(417) 评论(0) 推荐(0)
摘要:https://codeforces.com/contest/702/problem/F 考虑依次加入每个物品,假设它的代价是$x$,那么会把剩余钱$\in [x,+\infty]\(的\)-=x$,答案++。 考虑分成三个区间来看: \([0,x-1],[x,2x-1],[2x,+infty)\) 阅读全文
posted @ 2020-07-27 21:24 Cold_Chair 阅读(283) 评论(0) 推荐(0)
摘要:题目大意: 给一棵$n$个点的树,选$k=1 \sim n$条不相交边,使得权值和最大。 \(n \le 2 \times 10^5\) 题解: 考虑设$f[i][j][0/1]$表示$i$子树里选了$j$条边,$i$选了没有的最大值。 猜性质,它是凸的。 那么就可以闵科夫斯基和快速合并两个这样的数 阅读全文
posted @ 2020-07-21 21:37 Cold_Chair 阅读(303) 评论(0) 推荐(0)
摘要:参考博客: http://immortalco.blog.uoj.ac/blog/2102 https://www.cnblogs.com/Judge/p/10475728.html 板题: https://www.luogu.com.cn/problem/P3865 注意点: 猫树的语处理的数组的 阅读全文
posted @ 2020-06-08 21:43 Cold_Chair 阅读(226) 评论(0) 推荐(0)
摘要:https://loj.ac/problem/2018 题解: 先考虑只有加点怎么做?设要加的点是第$x$大,$x-1$的右儿子和$x+1$的左儿子一定恰好有一个是空的,加到那里即可。 再模拟一下把最小值$x$给splay到根的过程,发现$x$到根的链几乎没有变,变得是:把$x$的右儿子接到$x$的 阅读全文
posted @ 2020-06-08 11:50 Cold_Chair 阅读(364) 评论(0) 推荐(0)
摘要:https://codeforces.com/contest/776/problem/F 题解: 好像很久没写平面转对偶了,当板题写一写。 发现多边形内的对偶图是棵树,因为如果有m条边,则有m+1个域,m+1个点m条边的连通图一定是树。 第一个思考点是标号,发现这道题中两个域最多只有一个公共点,所以 阅读全文
posted @ 2020-06-04 21:50 Cold_Chair 阅读(413) 评论(0) 推荐(0)
摘要:https://loj.ac/problem/2092 http://hihocoder.com/problemset/problem/1954 http://hihocoder.com/problemset/problem/1034 这三道题都是对一个区间里的(树、序列)进行统一的修改。 高级一点 阅读全文
posted @ 2020-06-04 11:12 Cold_Chair 阅读(200) 评论(0) 推荐(0)
摘要:http://hihocoder.com/contest/challenge37/problem/4 考虑每次都是把一段或到另一段去。 也就是说要快速找到原来段1,新的段0的位置 结论:(1,0)的个数=(0,1)的个数 证明:设增量是$x$,$a[i]$到$a[(i+x)modm]\(连边,可以发 阅读全文
posted @ 2020-06-03 16:35 Cold_Chair 阅读(184) 评论(0) 推荐(0)
摘要:https://loj.ac/problem/2092 题解: 因为保证询问合法,所以可以把询问放到最后去询问 0操作可以视作对$[1,n]$的树都操作,但是在1操作时,因为没有$x$的树不换生长节点,所以要和对应0操作的区间取交。 设1操作的区间取交是[l,r],若从左往右考虑每个树,发现$tre 阅读全文
posted @ 2020-06-03 10:31 Cold_Chair 阅读(137) 评论(0) 推荐(0)
摘要:https://loj.ac/problem/3220 题解: 两维独立。 因为每个区间都是取或者取补集,所以枚举一个一定选点,就知道每个区间怎么选了。 这是$O(n^2)$的。 发现从左往右枚举这个点,用线段树维护区间加减和最大值及数量就能做了。 时间复杂度:\(O(n~log~n)\) 然而有更 阅读全文
posted @ 2020-06-02 21:36 Cold_Chair 阅读(276) 评论(0) 推荐(0)
摘要:http://codeforces.com/gym/102331/problem/H 题解: 首先,当$k$很小时,有一经典模拟费用流做法: 每次找到最大的子区间,加上它,并把它取反,可以用线段树维护。 但这题$k$和$n$同阶,需要思考其它的做法。 还可以凸优化dp,二分斜率k后用单调队列就可以$ 阅读全文
posted @ 2020-05-28 21:36 Cold_Chair 阅读(867) 评论(2) 推荐(0)
摘要:Description: https://gmoj.net/senior/ main/show/4611 题解: 先把A从大到小排序,最小的由排序不等式显然。 考虑类似第k短路的A 的做法。 定义状态为一个已经确定的前缀,它自己的代价显然,它的估价函数为把剩下的数字从小到大填的代价。 以自己代价+估 阅读全文
posted @ 2020-05-25 20:01 Cold_Chair 阅读(228) 评论(0) 推荐(0)
摘要:https://www.spoj.com/problems/QTREE6/ 考虑对0颜色和1颜色分别维护定根(no reverse)lct。 即在$c[x]$的lct上给$x$到$fa[x]$连一条边。 修改直接link、cut。 查询x的话,考虑access走到最上面的点,这个点实际上和x是不连通 阅读全文
posted @ 2020-05-19 21:21 Cold_Chair 阅读(198) 评论(0) 推荐(0)
摘要:Description: https://gmoj.net/senior/ main/show/6638 题解: 因为数据太水了,所以暴力用map维护就能过这题了。 考虑一个更加靠谱的做法,类似于《蚯蚓》,用两个队列维护,一个队列是一开始的排好序加进去。 另一个队列就是新产生的数的队列。 不难发现, 阅读全文
posted @ 2020-05-16 16:02 Cold_Chair 阅读(280) 评论(0) 推荐(0)
摘要:Description: : $1 \le n, Q \le 5e5$ 题解: 这题唯一的难度就是如何知道最小不可询问子草原绿值。 这个相当于问:有一堆数,每个可以用一次或不用,问最小凑不出来的自然数是多少。 首先把这些数排序,假设当前的答案是$p$,初值$=1$ 从小到大加入每个数$x$,若$x 阅读全文
posted @ 2020-05-09 22:17 Cold_Chair 阅读(424) 评论(2) 推荐(0)
摘要:https://gmoj.net/senior/ main/show/5753 $1\le n \le 1e5$ 题解: 加入一个串之后答案会发生什么变化呢? $ans+=n max\{lcp(news,s'\in oldS)\}$ 现在思考如何快速求两个串的lcp,发现可以维护每个串的hash值的 阅读全文
posted @ 2020-05-09 15:26 Cold_Chair 阅读(243) 评论(0) 推荐(0)
摘要:http://uoj.ac/problem/7 记$dis[i]$为到根的距离。 dp就是: $f[i]=min(f[j]+(dis[i] dis[j]) p[i]+q[i])$ 可行的$j$是$i$到一个祖先的一条链。 考虑树是一条链的时候,直接扫过去并用线段树维护下凸壳,查询就线段树上每个区间二 阅读全文
posted @ 2020-04-30 15:26 Cold_Chair 阅读(191) 评论(0) 推荐(0)