随笔分类 -  数据结构

摘要:#3523. 「IOI2021」分糖果 直接处理不太好做,发现我们只需求最终结果,考虑将序列当作询问做扫描线,线段树维护与当前位置有关的操作。 维护每个区间内变化量前缀和的最大最小值,发现如果一个区间最大值与最小值只差超过了 $c[i]$ ,那么在这个区间内至少会碰到一次顶部或底部,触碰边界前的操作 阅读全文
posted @ 2022-08-09 19:04 一粒夸克 阅读(226) 评论(0) 推荐(0) 编辑
摘要:【IOI2021】registers 【IOI2021】dungeons 考虑一个关键性质:打死一个怪以后,英雄的体力值会增长怪物的血量,也就是说,如果英雄打死了一个和自己势均力敌的怪物,那么其血量会成倍增长。 发现了这个性质之后,我们考虑对权值分层,即设第 $i$ 层表示血量区间 $[2^i,2^ 阅读全文
posted @ 2022-08-05 11:30 一粒夸克 阅读(159) 评论(0) 推荐(0) 编辑
摘要:CF793F Julia the snail 考虑扫描线,对于一个 $l_i,r_i$ ,我们需要的操作就是对左端点在 $[1,l_i]$ 中且大于 $l_i$ 的答案改为 $r_i$ ,考虑吉司机线段树的思路,如果区间内只有最大值超过了 $l_i$ 则暴力修改,否则递归下去,均摊复杂度 $O(n\ 阅读全文
posted @ 2022-07-15 18:31 一粒夸克 阅读(243) 评论(0) 推荐(0) 编辑
摘要:毛毛虫剖分 一种由重链剖分推广而成的树上结点重标号方法,支持 修改/查询 一只毛毛虫的信息,并且可以对毛毛虫的身体和足分别 修改/查询 不同信息 。 可以用来解决一些大力树剖也可以解决的问题。 一些定义: 毛毛虫:一条树上的链和与这条链邻接的所有结点构成的集合; 虫身:毛毛虫的链部分; 虫足:毛毛虫 阅读全文
posted @ 2022-07-01 16:52 一粒夸克 阅读(1158) 评论(2) 推荐(3) 编辑
摘要:CodeChef - BTREE Union on T 首先可以很自然地想到把虚树建出来然后在上面搞。 我们做两遍 \(\text{dp}\),把每个点的 \(r_i\) 更新成从这个点出来能覆盖的最远距离和从其他点出来经过这个点后能够覆盖的最远距离的最大值。 这样我们保证了对于一条边 \((u,v 阅读全文
posted @ 2022-06-23 12:06 一粒夸克 阅读(154) 评论(0) 推荐(1) 编辑
摘要:[ICPC2017 WF]Money for Nothing 因为赚取的差价就是等于时间之差与价格之差的乘积。 所以可以看成是平面上的问题。 建立一个直角坐标系,将时间作为横坐标,价格作为纵坐标。 然后将生产商和消费商的信息转为平面上的点,其中将生产商划为A类点,消费商划为 \(B\) 类点。 之后 阅读全文
posted @ 2022-06-12 19:55 一粒夸克 阅读(123) 评论(0) 推荐(0) 编辑
摘要:前言与约定 回文树(Palindromic Tree)是一个储存一个字符串所有回文子串的数据结构。 在本文中,作如下约定: \(\Sigma\) 表示字符集 。 \(|s|\) 表示字符串 \(s\) 的长度 。 \(s_i\) 表示字符串 \(s\) 的第 \(i\) 个位置的字符,编号从 \(1 阅读全文
posted @ 2022-06-09 15:29 一粒夸克 阅读(234) 评论(0) 推荐(0) 编辑
摘要:CF1039D You Are Given a Tree 容易发现,当 \(k\) 不断增大时,答案不断减小,且 \(k\) 的答案不超过 \(\lfloor\frac {n}{k}\rfloor\) ,因此不同的答案个数是 \(\sqrt n\) 级别的,可以用一种类似整体二分的方式求解。 对于一 阅读全文
posted @ 2022-05-25 21:51 一粒夸克 阅读(117) 评论(0) 推荐(0) 编辑
摘要:CF547E Mike and Friends \(\text{SAM}\) 或 \(\text{AC}\) 自动机板子题,线段树合并或离线二位数点均可。 点击查看代码 #include<bits/stdc++.h> using namespace std; int n,q; char s[1000 阅读全文
posted @ 2022-05-11 14:27 一粒夸克 阅读(129) 评论(0) 推荐(0) 编辑
摘要:[BZOJ3636]教义问答手册 点击查看代码 #include<bits/stdc++.h> using namespace std; int n,L,q; int a[100005],sum[100005],cnt[400005]; int dp[21][55][100005],loc[1000 阅读全文
posted @ 2022-01-15 14:39 一粒夸克 阅读(91) 评论(0) 推荐(0) 编辑
摘要:点分治 [SDOI2016]模式字符串 点击查看代码 #include<bits/stdc++.h> using namespace std; typedef unsigned long long int ulli; const ulli base = 31; const int inf=0x3f3 阅读全文
posted @ 2022-01-15 12:12 一粒夸克 阅读(117) 评论(0) 推荐(0) 编辑
摘要:边分治 「BZOJ 2870」最长道路tree 点击查看代码 #include<bits/stdc++.h> using namespace std; int n,m; int v[400005]; int ver[400005],ne[400005],head[400005],cnt=1,val[ 阅读全文
posted @ 2022-01-15 12:12 一粒夸克 阅读(132) 评论(0) 推荐(0) 编辑
摘要:一般提到动态树,我们会不约而同的想到 LCT,这算是比较通用,实用,能力较为广泛的一种写法了。当然,掌握 LCT 就需要熟悉掌握 Splay 和各种操作和知识。ETT(中文常用称呼:欧拉游览树)是一种及其睿智且暴力,可以用暴力数据结构维护的一种除了能胜任普通动态树的 Link & Cut 操作还可以 阅读全文
posted @ 2021-12-19 18:42 一粒夸克 阅读(352) 评论(0) 推荐(0) 编辑
摘要:【模板】动态树(Link Cut Tree) Link-cut-tree是一种维护动态森林的数据结构,在需要动态加边/删边的时候就需要LCT来维护。 Link-cut-tree的核心是轻重链划分,每条重链用一颗splay来维护。 点击查看代码 #include<bits/stdc++.h> usin 阅读全文
posted @ 2021-12-17 19:38 一粒夸克 阅读(178) 评论(0) 推荐(0) 编辑