
-------数据结构-------
文章平均质量分 58
ccosi
停下了,也要重新出发
展开
-
【BZOJ】[HAOI2015]树上操作-DFS序
传送门:点击打开链接 题意:有一棵点数为 N 的树,以点 1 为根,且树点有边权。有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。数据范围: N,M<=100000 ,且所有输入数据的绝对值都不会超过 10^6 。...原创 2018-02-27 21:28:47 · 306 阅读 · 0 评论 -
【模板】树链剖分
洛谷传送门:点击打开链接由于是模板就不说什么了。这篇博客十分好理解:点击打开链接时隔几周终于AC的我流下了感动的泪水。各种MLE,TLE,RE,WA。事实告诉我们要充分理解之后再打数据结构的板子,不然就会像我一样的zz。题面如下: 题目描述如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作:操作1: 格式: 1 x y z 表...原创 2018-03-11 14:06:48 · 191 阅读 · 0 评论 -
【BZOJ】洞穴勘测-Link-cut-tree
传送门:BZOJ洞穴勘测 LCT教程:LCT(Link-Cut Tree)详解(蒟蒻自留地)题意 辉辉热衷于洞穴勘测。某天,他按照地图来到了一片被标记为JSZX的洞穴群地区。经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴。假如两个洞穴可以通过一条或者多条通道按一定顺序连接起来,...原创 2018-03-22 22:39:22 · 259 阅读 · 0 评论 -
【模板】可持久化平衡树(非旋Treap)
洛谷传送门:【模板】可持久化平衡树题意您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对于各个以往的历史版本):1.插入x数2.删除x数(若有多个相同的数,因只删除一个,如果没有请忽略该操作)3.查询x数的排名(排名定义为比当前数小的数的个数+1。若有多个相同的数,因输出最小的排名)4.查询排名为x的数5.求x的前驱(前驱定义为小于x...原创 2018-03-23 13:21:59 · 1411 阅读 · 0 评论 -
【扫描线】火星探险-线段树
没有传送门。 不清楚离散化的可以先看看这篇博文:离散化介绍题意 在2051年,若干火星探险队探索了这颗红色行星的不同区域并且制作了这些区域的地图。现在,Baltic空间机构有一个雄心勃勃的计划,他们想制作一张整个行星的地图。为了考虑必要的工作,他们需要知道地图上已经存在的全部区域的大小。你的任务是写一个计算这个区域大小的程序。 具体...转载 2018-03-19 22:34:23 · 599 阅读 · 0 评论 -
【二维树状数组】矩阵操作(matrix)-容斥原理
先强势安利一篇关于树状数组的详细博客。 “高级”数据结构——树状数组! 详细介绍了各种树状数组操作(单点区间修改,单点区间查询,前缀和记录,差分方法)。 虽然说这些操作线段树都可以实现,但是树状数组又好写又快啊(虽然开始学的时候不是很懂)。题意 给定一个N*N的矩阵A,其中每个元素不是0就是1。A[i,j]表示在第i行第j列的数。刚开...原创 2018-03-19 22:46:14 · 603 阅读 · 0 评论 -
【BZOJ】栅栏-线段树优化DP
蒟蒻做了一天线段树,表示心态炸裂,从未想到线段树还有这么多操作(已狗带)。 传送门:BZOJ3387题意 Farmer John 为奶牛们设置了一个障碍赛。障碍赛中有n个(n≤50000)各种长度的栅栏,每个都与x轴平行,其中的第i个栅栏的y坐标为i。 终点在坐标原点(0,0),起点在...原创 2018-03-19 23:08:14 · 717 阅读 · 0 评论 -
【BZOJ】Tet-Tetris 3D-超级线段树
蒟蒻要被线段树折磨吐血而亡了…… 传送门:[POI2006]Tet-Tetris 3D题意 Task: Tetris 3D “Tetris” 游戏的作者决定做一个新的游戏, 一个三维的版本, 在里面很多立方体落在平面板,一个立方体开始落下直到碰上一个以前落下的立方体或者落地即停止. 作者想改变一下游戏的目的使得它更大众化,在新游戏中你...原创 2018-03-19 23:17:42 · 248 阅读 · 0 评论 -
【分块】枚举(enum)-链表
题目来源:《高级数据结构》题意 有一列整数,共n个。每次可以对这些整数有两种操作: (1)第i个到第j个整数分别加上数p; (2)询问这些数中比t小的数的个数。输入第一行有两个数,n和m(1≤n≤100000,m≤1000...原创 2018-03-20 13:05:04 · 586 阅读 · 0 评论 -
【洛谷】弹飞绵羊-分块/LCT
传送门:洛谷:[HNOI2010]弹飞绵羊题意某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞。绵羊想知道当它从第i个装置起步时,被...原创 2018-03-20 23:00:43 · 217 阅读 · 0 评论 -
【BZOJ】Kpm的MC密码-trie树+主席树+dfs序
传送门:BZOJ-Kpm的MC密码题意&nbsp;&nbsp;&nbsp;&nbsp;现在定义这么一个概念,如果字符串s是字符串c的一个后缀,那么我们称c是s的一个kpm串。 &nbsp;&nbsp;&nbsp;&nbsp;系统将随机生成n个由a…z组成的字符串,由1…n编号(s1,s2…,sn),然后将它们按序告诉你,接下来会给你n个数字,分别为k1…kn,对于原创 2018-03-30 22:58:25 · 222 阅读 · 0 评论 -
【POJ】Stars in Your Window-线段树+扫描线
传送门:poj2482-Stars in Your WindowDescriptionAssume the sky is a flat plane. All the stars lie on it with a location (x, y). for each star, there is a grade ranging from 1 to 100, representing i...原创 2018-03-25 22:52:02 · 281 阅读 · 0 评论 -
【BZOJ】2819:Nim-树剖&线段树&手写栈
传送门:bzoj2819题解题中的Nim游戏其实就是看选中的这几堆石头每堆石头数量的异或和是否为0。 我们只需要维护每个点到根节点路径上的异或和就好了。 每次询问只要把两个节点到根节点路径异或和异或起来(抵消了LCA-ROOT一段)再异或一下LCA就好了。 对于修改,考虑只会影响到该节点为根的子树内的所有节点。直接dfs序建个线段树改一下。 被题面坑了,写了一个手写栈。...原创 2018-05-17 13:30:52 · 253 阅读 · 0 评论 -
【uoj】198:【CTSC2016】时空旅行-dfs序&线段树&凸包
传送门:uoj198题解y,z坐标无用。 先化简一下式子,假设选择的是第iii个星球,其xxx轴上值为xixix_i。则花费为: (xi−x0)2+ci=−2xix0+x2i+ci+x20(xi−x0)2+ci=−2xix0+xi2+ci+x02(x_i-x_0)^2+c_i=-2x_ix_0+x_i^2+c_i+x_0^2 不考虑x0x0x_0,这个式子就是个直线,所以我们维护...原创 2018-05-17 22:48:20 · 286 阅读 · 0 评论 -
【BZOJ】4196:【NOI2015】软件包管理器-树剖
传送门:bzoj4196代码树剖水题……#include&lt;bits/stdc++.h&gt;using namespace std;const int N=1e5+10;int tot,n,Q,df[N],ot[N],cnt,son[N],tp[N],sz[N];int f[N],head[N],to[N],nxt[N],d[N],rt;int sum[...原创 2018-05-17 22:51:21 · 165 阅读 · 0 评论 -
【BZOJ】[Cqoi2011]动态逆序对-树套树
传送门:bzoj3295题解线段树套树状数组代码#include&lt;cstdio&gt;#include&lt;algorithm&gt;#include&lt;iostream&gt;#include&lt;cstring&gt;using namespace std;typedef long long ll;const int原创 2018-05-12 19:26:22 · 208 阅读 · 0 评论 -
【BZOJ】3196: Tyvj 1730 二逼平衡树-树套树
传送门:bzoj3196代码树套树模板,线段树套Treap。 卡常是因为本蒟蒻太菜了#include&lt;cstdio&gt;#include&lt;iostream&gt;#include&lt;cstring&gt;#include&lt;cstdlib&gt;#include&lt;algorithm&gt;原创 2018-05-19 13:11:25 · 244 阅读 · 0 评论 -
【BZOJ】 [ZJOI2008]树的统计Count-树链剖分
传送门:BZOJ1036-树的统计题意一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 I II. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点...原创 2018-04-29 15:13:03 · 126 阅读 · 0 评论 -
【BZOJ】[CTSC2008]网络管理Network-线段树套Treap
传送门:BZOJ1146-网络管理题意M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门。为了让分布在世界各地的N个部门之间协同工作,公司搭建了一个连接整个公司的通信网络。该网络的结构由N个路由器和N-1条高速光缆组成。 每个部门都有一个专属的路由器,部门局域网内的所有机器都联向这个路由器,然后再通过这个通信子网与其他部门进行通信联络。该网络结构保证网络中的任...原创 2018-04-29 15:27:01 · 233 阅读 · 0 评论 -
【BZOJ】 [HNOI2012]永无乡-并查集+主席树
传送门:BZOJ2733-永无乡题意永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示。某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛。如果从岛 a 出发经过若干座(含 0 座)桥可以到达岛 b,则称岛 a 和岛 b 是连 通的。现在有两种操作:B x y 表示在岛 x 与岛 y 之...原创 2018-04-29 17:56:01 · 145 阅读 · 0 评论 -
【BZOJ】2759一个动态树好题-LCT
题解真·动态树好题。 根据题目要求,我们以点i向其p[i]连边,必然会得到基环树林,每个解可以在所在环里得解。我们将每个环上的一条边连成虚边,该边所连接的就是LCT里的root和p[root](记为rt的spf(special_father))。 我们在update是可以维护每个点的k,b,不断向上累计系数,更新到rt. 在求当前a的值时候,我们可以先找到rt,把rt的spf acces...原创 2018-06-03 14:18:40 · 246 阅读 · 0 评论 -
【BZOJ】3159决战-LCT
先贴代码,果断时间再补题解。可以套两颗LCT。 本蒟蒻一晚上就耗这了… #include&amp;amp;amp;lt;cstdio&amp;amp;amp;gt; #include&amp;amp;amp;lt;algorithm&amp;amp;amp;gt; #include&amp;amp;amp;lt;cstring&amp;amp;amp;gt; #include&a原创 2018-06-12 22:57:22 · 409 阅读 · 0 评论 -
【BZOJ】4653[NOI2016]区间-线段树
题解noi2016唯一水题。好久没打线段树了(跪 数据范围1e9,先离散化。 将区间按长度降序排序,一个一个加入当前状态,直到有一个点上能刚好被m个区间覆盖,假设当前加入的区间标号为le,然后再把之前一个个加入还未删去的区间一个个删去,直到删去当前区间时恰好没有点能被m个区间覆盖,设该区间标号为ri,那么len[ri]−len[le]len[ri]−len[le]len[ri]-len[l...原创 2018-06-12 23:12:25 · 193 阅读 · 0 评论 -
【BZOJ】3924幻想乡战略游戏-点分树
传送门:bzoj3924题解暴力点分树往上跳。代码#include&lt;cstdio&gt;#include&lt;cstring&gt;#include&lt;iostream&gt;#include&lt;cstdlib&gt;#include&lt;cctype&gt;#include&原创 2018-05-30 22:48:20 · 167 阅读 · 0 评论 -
【LOJ】#2537. 「PKUWC2018」Minimax-线段树合并
题解我们从叶子节点逐层递归到根节点。 我们可以建动态开点权值线段树,每个结点上建一颗,递归时考虑合并左右子树的信息。 可以得到,当合并左右儿子到某父结点上时,可以这样转移: 设f[i][j]是在i结点上,权值为j(令权值为j只能从左儿子中转移上来)的概率,则f[i][j]=f[lc[i]][j]∗((1−p)∗sum1[rc[i]](所有值大于i的节点上的概率之和)+p∗sum2[rc[...原创 2018-06-23 00:03:06 · 506 阅读 · 0 评论 -
【BZOJ】3611: [Heoi2014]大工程-虚树&树形DP
传送门:bzoj3611题解C(k,2)条边就是把所有点之间都连起来…然后询问所有两两之间边的最大值和最小值。(读错题意了蜜汁尴尬) 注意询问节点总数不超过2n,当然是建虚树,然后在虚树上dp啦。 建虚树的方法是这样的,要维护一条最右链(用的链式前向星,当然是最右了(雾)) k=rd();for(i=1;i&lt;=k;++i) {a[i]=rd();in[a...原创 2018-06-24 21:31:53 · 197 阅读 · 0 评论 -
Qtree3-主席树
题意你被给定一棵带点权的n个点的有根数,点从1到n编号。 定义查询 query(x,k): 寻找以x为根的k大点的编号(从小到大排序第k个点) 假设没有两个相同的点权。 输入格式: 第一行为整数n,第二行为点权,接下来n-1行为树边,接下来一行为整数m,下面m行为两个整数x,k,代表query(x,k) 输出格式: m行,输出每次查询的结果。数据范围n≤105&nbsp...原创 2018-06-18 18:43:10 · 314 阅读 · 0 评论 -
Qtree 6-LCT
题意给你一棵n个点的树,编号1~n,共m次操作。每个点可以是黑色,可以是白色。初始时所有点都是黑色。下面有两种操作: 0 u:询问有多少个节点v满足路径u到v上所有节点(包括)都拥有相同的颜色 1 u:翻转u的颜色数据范围1≤n,m≤1051≤n,m≤1051\leq n,m\leq 10^5题解先建两颗树分别维护两种颜色。保证同色的结点只有在对应颜色的lct内...原创 2018-06-18 18:52:18 · 322 阅读 · 0 评论 -
Qtree7-LCT&multiset
题意一棵树,每个点初始有个点权和颜色(输入会给你) 0 u :询问所有 u,v 路径上的最大点权,要满足 u,v 路径上所有点的颜色都相同 . 1 u:反转 u 的颜色 2 u w:把 u的点权改成 w colori∈[0,1],wi∈[−109,109],n,m≤105colori∈[0,1],wi∈[−109,109],n,m≤105color_i\in[0,1],w_i\in...原创 2018-06-18 18:56:58 · 191 阅读 · 0 评论 -
【模板】IOI2011race-点分治
题意给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小 N≤200000,K≤1000000N≤200000,K≤1000000N \leq 200000, K \leq 1000000代码点分治的一类经典模型#include&lt;cstdio&gt;#include&lt;algorithm&gt;#include&lt;cctype&gt;...原创 2018-07-01 14:59:20 · 170 阅读 · 0 评论 -
[CF 293E] Close Vertices - 点分治
题解就是裸的点分治。 对于每个重心,先dfs把所有点到重心的路径的长度和代价处理好。 然后按代价排个序,首尾指针(l,r)一起扫一遍,r从右到左,把每个len[l]+len[r]≤wlen[l]+len[r]≤wlen[l]+len[r]\leq w的点的的路径长度都加进个BIT里,直接求即可。每一对都算了两次,最后除以个二就好了。 空间得开够啊。代码#include...原创 2018-07-19 19:58:59 · 431 阅读 · 0 评论 -
【COGS】 [HZOI 2015] Persistable Editor-可持久化平衡树
传送门:cogs2314题解非旋treap的模板题。把字符串的信息按输入顺序记在treap上,每个节点存一个字符。插入字符串和输出都直接暴力找(长度保证)代码#include&amp;amp;lt;bits/stdc++.h&amp;amp;gt;using namespace std;const int N=1e5+1000;int rt[N],tim,cnt;int n,op,ix,iy,...原创 2018-07-29 09:16:27 · 347 阅读 · 0 评论 -
【BZOJ】2877:[Noi2012]魔幻棋盘-线段树套线段树&差分
题解由gcd(a,b)=cgcd(a,b)=cgcd(a,b)=c,可得c|a,c|bc|a,c|bc|a,c|b,那么(a−b)|c(a−b)|c(a-b)|c,由可以把bbb全部提出来,即为(a&nbsp;mod&nbsp;b)|c(a&nbsp;mod&nbsp;b)|c(a\ mod\ b) | c,所以求gcdgcdgcd可以欧几里得辗转相除。 那么对于这道题,显然是一个线段树...原创 2018-07-29 09:40:47 · 215 阅读 · 0 评论 -
【BZOJ】3730: 震波 -点分树&线段树
题解此题最好用BIT,线段树TLE了.. 我们先构建点分树,nlog2nnlog2nnlog^2n把每个重心所管辖子树内每个点以距离为下标,点权为值加入到动态开点线段树里,注意这里要分别建两棵线段树,一棵处理重心,一棵处理重心到点分树上的父节点处理的容斥信息。 修改和求和都可以nlog2nnlog2nnlog^2n处理。 这题最坑的是:暴力跳点分树的时候不会中途弹出,有可能其中有一层的父...原创 2018-07-20 20:08:36 · 509 阅读 · 0 评论 -
【BZOJ】3083: 遥远的国度 -树剖&线段树
传送门:bzoj3083题解这篇题解,必须要写(这道简单题真的坑到我了)…好久没打树剖的下场。 除开换根都是裸树剖+线段树。 以1号节点为根建树。换根可以O(1)O(1)O(1)换,只需要在查询的时候讨论一下: 若当前查询的节点ididid不在1到rootrootroot的路径上,直接查询子树信息(dfsdfsdfs序上的in,outin,outin,out)。 反之,当前以idi...原创 2018-08-20 20:37:36 · 205 阅读 · 0 评论 -
【BZOJ】2594: [Wc2006]水管局长数据加强版 LCT&kruskal
传送门:bzoj2594题解有熟练ds做题经验的同学都会立刻发现删边不好操作,所以首先把询问离线,转化为加边。 所以对于最后留下的边,因为保证整个图连通,kruskalkruskalkruskal求个最小生成树,必然保证了答案最小。 LCTLCTLCT中需要一直维护点之间树的形态。那么考虑加边操作,若两端已经连通,加入这条边必然会形成环,最优的策略显然是把环上值最大的边删去。 ...原创 2018-08-20 20:57:25 · 203 阅读 · 0 评论 -
【BZOJ】2683: 简单题 -KD-tree
传送门:bzoj2683题解也可以用cdqcdqcdq分治做,这里用的KD−treeKD−treeKD-tree。 每个点上记录一下所管辖子树x,yx,yx,y的最大,最小值,以及总值,还有自己的点信息。 仿照替罪羊树,如果树太不平衡了直接暴力重构。 每次查询如果完整覆盖这个点子树,直接返回总值,如果完全无关,也直接返回0,否则先判断当前点再继续递归下去。代码...原创 2018-08-20 21:02:54 · 242 阅读 · 0 评论 -
【CF】700E Cool Slogans 后缀自动机&DP&贪心&线段树可持久化合并
传送门:codeforces700E题解做这道题时又发现自己对后缀自动机的理解还不够深刻。。。 简单说一下题意,给定一个字符串,求一个子串序列s1,s2,s3...s1,s2,s3...s_1,s_2,s_3...,满足序列中sisis_i在si+1si+1s_{i+1}中至少出现了两次(出现的范围之间可以相交,起始点不同即可),要求输出子串序列的最大长度。 设f[i]f[i]...原创 2018-08-14 19:29:02 · 294 阅读 · 0 评论 -
【BZOJ】2434: [Noi2011]阿狸的打字机-AC自动机&fail树&BIT
AC自动机 fail树 BIT原创 2019-03-07 07:34:23 · 198 阅读 · 0 评论 -
【LOJ】apio2016烟火表演-可并堆&凸包
讲解详见ppt%%%%代码#include&lt;cstdio&gt;#include&lt;cstring&gt;#include&lt;iostream&gt;#include&lt;algorithm&gt;using namespace std;typedef long long ll;const int N=3e5+10;const原创 2018-06-03 13:47:13 · 452 阅读 · 0 评论