数据结构
文章平均质量分 67
cqbzcsq
这个作者很懒,什么都没留下…
展开
-
[THUPC 2024 初赛] 二进制 (树状数组单点删除+单点查询)(双堆模拟set)
我们可以枚举序列长度len,然后用类似滑动窗口的方法,一次性预处理出每种字串的所有出现位置,也就是开N个set去维护所有的位置。预处理会进行O(logn)轮,每次需要O(n*logn)的时间复杂度初始化set并计算位置。总共复杂度O(nlog^2n),看一下时间限制6s,感觉可以过23333。删除操作可以直接暴力,直接从每种字串的位置集合中删除所有被影响到的位置,然后再把删除后字符串合并产生的新的子串加入到set中,过程中需要支持O(logn)的单点删除和单点查询。原创 2023-12-23 22:42:28 · 729 阅读 · 0 评论 -
2022.7.31记录
2022.7.31记录,分散层叠思想,四毛子思想,最小差值生成树,[NOI2014]魔法森林,[BJOI2014]大融合,[SDOI2017]树点涂色原创 2022-07-31 22:42:29 · 222 阅读 · 0 评论 -
指针版LCT
最近C语言刚学指针,想要练练手于是写了个指针版的LCT代码比较好理解,和非指针版的LCT差不多但是感觉还是有点慢。。。代码:(【模板】动态树(Link-Cut-Tree))#include<cstdio>#include<cstring>#include<algorithm>using namespace std;inline int gi(){ char c;int num=0,flg=1; while((c=getcha原创 2021-11-07 17:38:53 · 181 阅读 · 0 评论 -
恢复训练记录20210809
[NOI2018] 归程题面:https://www.luogu.com.cn/problem/P4768题解具有纪念意义的一道题AFO之后写的第一道题5555……竟然写了一个上午,不愧是老年选手咳咳……回归正题首先贪心一下,尽量选海拔大的边,于是按海拔建Kruscal最大生成树先来复习一下Kruscal生成树是什么回顾Kruscal的算法流程:按照权值大小顺序依次加边,用并查集判断连通性,如果不连通就加入该边。而Kruscal生成树是在加入一条边的时候,新建一个原创 2021-08-09 22:37:13 · 255 阅读 · 2 评论 -
CF666E Forensic Examination (SAM+线段树合并)
题面见:https://www.luogu.com.cn/problem/CF666E题解一个裸的SAM+线段树合并先把询问离线,对T建广义SAM,按串的标号建线段树,dfs一下跑一遍线段树合并在S串中枚举右端点,如果不存在的话就像kmp一样调fail指针知道存在,顺便记录一下当前匹配的长度如果长度不合法(就是询问串长度大于匹配了的串的长度),说明这个询问的串是在T中不存在的,直接continue如果合法就倍增定位当前询问串的位置,在其对应的线段树中查询一下就好了这S..原创 2020-06-14 11:43:43 · 253 阅读 · 0 评论 -
事情的相似度(SAM+LCT+树状数组)
题解此题的题意是求编号为一段区间的前缀的最长公共后缀的长度而这个最长公共后缀是可以超过这个区间限制的(被坑了好久。。。)那么这题就比较有思路了我们可以考虑一下暴力首先,我们对于每一个前缀[1,i],算出所有的前缀[1,1~i-1]与它的最长公共后缀的大小,存到一个vector里面查询的时候就只查[l,r]中每个点x的vector里面的[l,x-1]的答案,取最大值即可这样做是O(Qn^2)的考虑最长公共后缀的本质,不难联想到SAM先对原串建出SAM,...原创 2020-06-11 19:53:01 · 490 阅读 · 0 评论 -
[WC2013]糖果公园 (树上带修莫队)
题解首先我们发现吃糖的顺序是不会影响答案的影响答案的是每种糖的个数所以我们可以直接利用树上莫队来做树上莫队有两种写法,一种是在括号序列上进行莫队,另一种就直接对树进行分块,在树上进行莫队这里写的是在括号序列上的莫队如何带修改呢我们维护一种有三个指针的莫队(比普通的莫队多一个时间指针)类似普通的莫队一样移动指针就可以了只不过块的大小要调为n^(2/3)具体的时间复杂度分析可以看这篇博客代码:#include<cstdio>#i...原创 2020-06-11 17:33:26 · 214 阅读 · 0 评论 -
[WC2016]挑战NPC (一般图最大匹配----带花树)
题解:首先所有的球都得装进桶里,所以每个球都向可行的桶连边一个桶最多可以装3个球,考虑把一个桶拆成三个点现在要求半空桶的最大数量,如果一个桶只有一个点匹配,那么就cnt++但是这样可能会有两个原本可以分开放的点匹配到同一个桶导致答案减小有一种巧妙的建图方法,可以使能分开放的点尽量分开把一个桶拆成的三个点两两连边这样,在求最大匹配的情况下放在一起连的最大匹配数为3,而分开的最大匹配数为4就可以解决最大化半空桶数的问题如图:(红色为匹配边)但是由...原创 2020-06-10 13:19:34 · 262 阅读 · 0 评论 -
LOJ#6198. 谢特(SAM+01Trie树合并)
题解SAM+01Trie树合并的模板题(两样东西我都不太会,写了我一下午,我太菜了5555……)先考虑反着建SAM,得到的fail树就是原串的后缀树后缀树上两个点的LCA的endpos集合的最大长度就是这两个点的LCP长度这样我们就解决了第一个值LCP(x,y)考虑dfs一遍后缀树,那么每到一个节点,它的子树中的所有点对的贡献中的LCP(x,y)都是固定的了如何求一个子树中所有节点权值的两两异或最大值呢?用01Trie树来进行贪心,先尽量走不同方向,再走相同方...原创 2020-06-09 19:49:50 · 329 阅读 · 0 评论 -
20200606KD树、虚树总结
大码量题过多引起极度不适Prince's Problem题意:一个n个点的树,每个点有权值ai,给出Q次询问(u,v,w)求在路径u,v上的每一个点与w求gcd的积题解:先把询问离线,做一个树上差分然后分质因子考虑,发现只需要维护一下每种质因子的每种次幂有多少个询问的时候做一个前缀和,再把大于当前w的p因子次幂的取一个min值即可代码:(我不知道为什么写了3.5KB。。。)#include<cstdio>#include<cstring>#inclu原创 2020-06-06 14:44:13 · 260 阅读 · 0 评论 -
20200515省选模拟赛B、幻化成风(毒瘤容斥题+构造容斥系数+生成函数+hash状压DP+Trie树优化背包)
题解花了一上午+一中午终于把这道题A了首先,我们要求的是bi互不相同的合法方案数我们可以枚举一个a的集合S,来强制里面的b全部都相同,然后其它的随便放由于这个题的n的约数非常多,我们可以把它质因数分解一下再来做那么质因数分解之后怎么来算贡献呢?我们可以强制每一个质因子都在S中分配相同的幂次由于题目中的a在相等的情况下是无序的,而在不等的情况下又是有序的所以为了简化问题,我们干脆把ai都看作是不同的这样我们枚举集合就可以变成O(2^m)了(好像...原创 2020-05-16 17:01:48 · 497 阅读 · 0 评论 -
Union on Tree(毒瘤数据结构题)(点分树+虚树+树点覆盖去重)
There is a country whose road system is a tree, the nodes in the tree represent cities and the edge is the road between them, and each edge is of unit length. For safety, the government should put guards to protect all cities. But the government is in shor原创 2020-05-12 16:23:16 · 555 阅读 · 0 评论 -
CF407E k-d-sequence (线段树+单调栈)
题面:https://codeforces.com/problemset/problem/407/E题解这道题坑了我3个小时都是因为网上有一个set做法#include<cstdio>#include<cstring>#include<algorithm>#include<set>using namespace std;#define N 200005#define LL long longconst LL INF=..原创 2020-05-11 16:18:21 · 209 阅读 · 0 评论 -
20200507省选模拟赛A(序列自动机+重链剖分+链上倍增)
题解好题其实序列自动机也不是什么高级的东西但是重链剖分+链上倍增基本上就很难想得到了还有巧妙的输出方案的方法:先输出后面再输出前面,如果够了就return官方题解已经讲得很清楚了注意要先把所有的f初始化为1,表示只选择它自己的方案代码:#include<cstdio>#include<cstring>#incl...原创 2020-05-08 11:17:01 · 314 阅读 · 0 评论 -
20200505省选模拟赛A (回滚莫队)
题解回滚莫队裸题然而我在考试的时候一直在想对vl,vr进行莫队,脑子进水了。。直接对l,r进行莫队,就变成了线段树单点加,区间求最大值这样的复杂度是O(nsqrt(q)*logm+q*logm)的我们可以根号平衡一下,用分块set来实现O(1)插入,O(sqrt(n))查询(简单实现)但是我们发现这样会有问题当我们的莫队删除一个点的时候,最大值需要重新计算...原创 2020-05-08 11:07:45 · 234 阅读 · 0 评论 -
20200502省选模拟赛 C (莫队+数值分治)
题解或许这就是人生吧这题似乎比[Ynoi2015]此时此刻的光辉更毒瘤一些数的子集的gcd很难直接计算我们就来考虑每种质因子的贡献则答案就是f[p^k]表示在这段数中有多少个子集的gcd被p^k整除显然f[p^k]=2^g[p^k]-1,g[p^k]表示这段区间中有多少个数被p^k整除稍微变换一下形式最后的这个形式就比较简单我...原创 2020-05-05 08:17:18 · 286 阅读 · 0 评论 -
LOJ#6073. 「2017 山东一轮集训 Day5」距离 (可持久化树链剖分)
题面:#6073.「2017 山东一轮集训 Day5」距离题解好题又是原题重测的题大概就是让我们求感觉一点思路都没有啊。。。那我们先来看一个超级弱化版的题目([LNOI2014]LCA)它是让我们求这个题目相比之下就简单了许多关于计算dep[LCA(i,z)]我们可以先把i到1的路径上的所有点权都加一,再来求z到1路径的点权和由于这...原创 2020-05-04 00:40:44 · 295 阅读 · 0 评论 -
LOJ#6038. 「雅礼集训 2017 Day5」远行 (LCT维护两点距离+并查集维护树的直径)
题面:https://loj.ac/problem/6038题解居然再原题重测(原题重错、新题爆错)的考场上切了一道LCT的题(对于我这种菜鸡来说这是新题)一看就是维护森林中每棵树的直径以为可以用倍增LCA来求两点距离,发现它强制在线想了一下,发现可以用LCT来求两点距离因为所有的边权都为1,所以我们把一条链spilt出来后得到的链的节点树-1就是两点的距离...原创 2020-05-01 00:07:39 · 326 阅读 · 0 评论 -
2020.4.29省选模拟赛 A B C(容斥、图论计数DP、树套树+set)
A题目描述或许前路永夜,即便如此我也要前进,因为星光即使微弱也会为我照亮前途。已知一个 n*m 的矩阵,矩阵的每个元素都是非负整数.已知第 i 行的最大值为 ri ,第 j 列的最大值为 cj .求矩阵数目.输入格式第一行一个数 T ,表示数据组数.对于每组测试数据,第一行两个数 n , m 表示矩阵大小.接下来一行 n 个数,表示 r 数组 接下来一行 m 个数,...原创 2020-04-29 21:48:12 · 608 阅读 · 0 评论 -
LOJ#2461. 「2018 集训队互测 Day 1」完美的队列 (分块+离线+two_pointers)
题目描述:https://loj.ac/problem/2461题解非常巧妙的一道题我们对于一个操作i:[l,r,v],如果能够求出这个操作中最后一个被pop掉的v的时间(记为ed[i])即经历了(i,ed[i]]这些操作后,操作i的所有push进来的元素都被pop掉了如果我们可以求出所有操作的ed,我们就可以简单求出每一时刻的答案(自行思考,存一下每个元素的出现次...原创 2020-04-28 23:59:51 · 639 阅读 · 0 评论 -
[Ynoi 2016]谁的梦 (灵活运用STL+卡常数)
题目描述:https://www.luogu.com.cn/problem/P4692题解٩(๑>◡<๑)۶ 人生第二道YNOI ٩(๑>◡<๑)۶希望有生之年能刷完YNOI这道题的思路并不难想很明显我们可以对每种数分别求出它们的贡献,在加起来就是答案(con.size()*mlen-ans)(con表示迄今为止出现了多少种数)对于一种数...原创 2020-04-28 13:38:22 · 246 阅读 · 0 评论 -
省选模拟赛20200418 C、区间(bitset+卡常技巧+卡空间技巧)
看起来挺正常的一个数据结构题结果这内存限制:8MB题解显然可以用bitset而且bitset的空间开销比较小所以我们可以用分块,对每一个块存一个bitset块的两端就直接暴力加入bitset最慢用时6000ms+,得分10pts这就是我考试时的得分了。。。考虑一下怎么优化调整一下块的大小,发现调到n/35左右是最...原创 2020-04-18 22:09:26 · 362 阅读 · 0 评论 -
省选模拟赛20200417 B、树 (点分治+ST表 || 线段树分治+虚树)
题解一看就不会写了个60分的暴力就走人最后两分钟想到一个假的正解:换根维护线段树20200418:从早上9:00写到10:30,发现是有问题的因为换根时的修改区间在dfs序上,是连续的但是查询的区间只是编号连续,在dfs序上不一定连续。。。所以就只有看题解了题解:哦,原来还有这种操作,对编号分块,对编号建线段树好难写啊看了...原创 2020-04-18 21:27:37 · 249 阅读 · 0 评论 -
牛客挑战赛39、C、牛牛的等差数列 (线段树+细节处理)
题面:https://ac.nowcoder.com/acm/contest/5157/C题解线段树裸题由于一个细节调了我50minvoid insert(int i,int l,int r,LL f,LL d){ if(a[i].l>r||a[i].r<l)return; pushdown(i); if(l<=a[i].l&&...原创 2020-04-17 22:19:06 · 507 阅读 · 3 评论 -
2020.4.15 省选模拟赛总结(打响回归OI的第一炮)
我回来了纵使日薄西山即便看不到未来此时此刻的光辉盼君勿忘开幕雷击题解大概想了30min然后从9:20开始写,写到了11:00(果然,老年选手的码力急剧下降)然后从11:00调到了考试结束13:00。。。后来发现要加一个倍增,于是又花30min写了一个倍增13:30交卷。。。回归正题正难则反,我们来统计不合法的方案数...原创 2020-04-15 21:40:11 · 351 阅读 · 0 评论 -
省选模拟赛20200229(by Ark) T3 买买买(动态点分治)
题解٩(๑>◡<๑)۶人生第一道动态点分治٩(๑>◡<๑)۶一开始我点分治都不怎么会,更别说动态点分治了然后开始肝题解和std,肝了我两天,终于搞懂了然后写了一上午+下午,调了一晚上,终于A掉了如果不知道动态点分治,请看这里其实这道题思路并不难想点分树+线段树只是修改边的时候会比较麻烦考虑一条边改变权...原创 2020-03-05 20:30:49 · 257 阅读 · 0 评论 -
BZOJ3730 震波+BZOJ4372 烁烁的游戏(动态点分治)
震波在一片土地上有N个城市,通过N-1条无向边互相连接,形成一棵树的结构,相邻两个城市的距离为1,其中第i个城市的价值为value[i]。不幸的是,这片土地常常发生地震,并且随着时代的发展,城市的价值也往往会发生变动。接下来你需要在线处理M次操作:0 x k 表示发生了一次地震,震中城市为x,影响范围为k,所有与x距离不超过k的城市都将受到影响,该次地震造成的经济损失为所有受影响城市的价...原创 2020-03-05 15:55:19 · 174 阅读 · 0 评论 -
动态点分治讲解+例题([ZJOI2007]Hide 捉迷藏)
首先要知道点分治和点分树(大家应该都懂的)点分树的高度是log的,并且每一层的子树大小一定小于等于父亲的子树大小的1/2所以我们可以对点分树上的每个点维护一些数据结构(如:线段树,堆,平衡树……)说着简单写着难(hlq07没事写一发普通平衡树,ljh没事写一发紫荆花之恋,Freopen没事写一发希望,时代在进步)可能就我觉得难。。。(其实动态点分治的思想有点像树链剖分,但是它们...原创 2020-03-05 15:36:17 · 215 阅读 · 0 评论 -
20200225省选模拟赛(by Master.Yi)总结
题解套路题,直接切掉(果然,我们学校的题温和多了,其他学校的题完全没有思路。。。)直接手算一下生成函数,再推出递推式就可以矩阵快速幂了具体方法:之前做过一道更难的题:https://blog.csdn.net/C20180602_csq/article/details/103823671代码:#include<cstdio>#include<...原创 2020-02-25 21:47:54 · 258 阅读 · 0 评论 -
省选模拟赛20200212 树树树 (Boruvka算法+set+启发式合并)
题解Boruvka算法:每个点都先找到离自己最近/最远的点,把这些边连上,再把形成的连通块看成点继续操作显然这样做每次连通块数目至少会减半问题就在于怎样快速求一个块到块外点的距离我们可以把绝对值展开出4中情况每种情况中,对于每一个点,把它对绝对值之和的贡献放到set里面(开4个set,存同一个点的4种贡献)然后求一个块的最远点时,就把该连通块所有点的所...原创 2020-02-13 20:39:09 · 185 阅读 · 0 评论 -
2020寒假集训Day2 分治与分块 总结
(只讲新学会的)1、点分治解决合法括号序列路径计数首先每一个括号序列可以把它缩成一堆)))和一堆(((记录一下当前点分治中心到子树中任意节点的简化括号序列的剩余左右括号数目(要记录两种一种是从上向下、另一种是从下向上),然后在点分治中心合并答案即可至于怎么记录从下向上的简化括号序列,可以考虑从序列左边插入括号来维护栈2、点分树一棵树,n个点,有点权,多次询问,求到点x...原创 2020-02-05 22:08:33 · 432 阅读 · 0 评论 -
省选模拟赛第三场 T1 与非(巧妙的线段树+后缀insert优化 || 思维题)
题解先来讲一下我的做法于是在考试的时候就爆0了。。。但是O(logn)的insert太慢了,我们又考虑到题目只从尾端insert于是我们就可以从下向上合并pushup当它是父亲节点的右儿子是就可以把它的值上传了(因为这时它的父亲就有可能对答案做出贡献了)如果是左儿子就停止上传然后我们就愉快地发现这样做是均摊O(1)的...原创 2020-01-31 20:47:55 · 358 阅读 · 0 评论 -
BZOJ4154 [Ipsc2015]Generating Synergy(KD树代替树套树)
题面:https://www.lydsy.com/JudgeOnline/problem.php?id=4154KD树代替数据结构的主要思路:把限制条件转化到KD树上面的维度来进行计算题解用KD树的思路比较简单先把整棵树的dfs序:dfn数组求出来,随便把每个点的深度dep和子树大小siz求出来把点的坐标视为(dfn[i],...原创 2020-01-20 21:40:24 · 204 阅读 · 0 评论 -
BZOJ3489 A simple rmq problem(KD树代替可持久化树套树)
题面:https://www.lydsy.com/JudgeOnline/problem.php?id=3489题解可持久化树套树太难写了,直接用KD树水过去。。。对于每个点,找到前一个跟它的值相同的点pre,与后一个跟它的值相同的点nxt那么点 i 能够更新答案的充要条件就是:l<=i<=r ,prei<l , n...原创 2020-01-20 20:34:44 · 255 阅读 · 0 评论 -
BZOJ4066 简单题(KD树区间求和)
题目描述:https://www.lydsy.com/JudgeOnline/problem.php?id=4066题解无脑KD树,但是它卡我常数啊啊啊啊啊啊啊!!!!!写完一交TLE2min later,找到了一个SB错误:比较大小比较反了。。。然后就开始循环展开又T了然后就写了部分重构,调了个0.7的参数又T了然后把函数里面的数...原创 2020-01-19 23:00:44 · 239 阅读 · 0 评论 -
KD树学习笔记
清华的论文和网上的博客已经非常详细了,在此就不赘述了其实它比较像可持久化线段树,只不过每一层的顺序是不同的(就是维度交替有序)然后build、insert操作就和可持久化线段树一样了然后还有一个重构函数(替罪羊树的思想),就是直接把一个不平衡子树的所有节点存下来,然后build一下(其实非常好写的)(之前一直都觉得很难写,其实写出来就只有2行)写多了就熟练了,KD树还是比...原创 2020-01-18 16:25:36 · 279 阅读 · 0 评论 -
[HNOI2014]世界树 (虚树DP+倍增)
世界树世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界。在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平是使世界树能够生生不息、持续运转的根本基石。世界树的形态可以用一个数学模型来描述:世界树中有n个种族,种族的编号分别从1到n,分别生活在编号为1到n的聚居地上,种族的编号与其聚居地的编号相同。有的聚居地之间有双向的道路相连,道路的长度为...原创 2020-01-16 22:36:35 · 200 阅读 · 0 评论 -
A Research on "The Hundred Family Surnames"(虚树上求最远点对)
The Hundred Family Surnames is a classic Chinese text composed of common Chinese surnames. The book was composed in the early Song Dynasty. It originally contained 411 surnames, and was later expanded...原创 2020-01-13 14:59:34 · 207 阅读 · 0 评论 -
[SDOI2011]消耗战 (虚树DP)
题目描述在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达。现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军胜利在望。已知在其他k个岛屿上有丰富能源,为了防止敌军获取能源,我军的任务是炸毁一些桥梁,使得敌军不能到达任何能源丰富的岛屿。由于不同桥梁的材质和结构不同,所以炸毁不同的桥梁有不同的代价,我军希望在满足目标的同时...原创 2020-01-05 21:31:56 · 308 阅读 · 0 评论 -
[HNOI2017]影魔 (离线线段树好题)
题面:https://www.luogu.com.cn/problem/P3722题解离线线段树好题先想一下我们怎么求一个区间[l,r]的答案可以发现这并不好做。。。。233333于是我们会想到:固定一个端点,预处理出另一个端点的所在位置(当然,这两个端点会构成一个p1或p2型的区间)与它的贡献说通俗(复杂)点就是把每一个端点对整个序列的贡献算...原创 2019-12-23 23:02:15 · 303 阅读 · 0 评论