数据结构
文章平均质量分 59
616156
赛高______↑
展开
-
【数据结构】【LCT】绝版题
题意:分析:很裸的LCT维护子树信息。很显然,如果选中的点从u到v,那么总代价是+P-Q,说白了只跟两侧的点数有关。因此,只要从根出发,找每个儿子:如果满足其子数权值和*2超过了总权值和,那么向这条边走,一定会使得答案更优。所以我们唯一需要做的,就是统计每个点的子树权值和即可。只不过这题好在一不换根二不改子树,所以就那个set存一下虚儿子的信息即可。#include<cs...原创 2019-03-13 17:40:43 · 398 阅读 · 0 评论 -
【树链剖分】Codechef DGCD
题意:给出一棵点权树,有M次操作:1、询问一条路径上的GCD2、将一段路径上的点权加上d分析:如果这题在一个序列上就非常美妙了:利用辗转相减法:GCD(a,b)=GCD(a−b,b)GCD(a,b)=GCD(a-b,b)GCD(a,b)=GCD(a−b,b)所以如果这个问题在一个序列上:设为A1,A2,……AnA_1,A_2,……A_nA1,A2,……An就可以利用差分,...原创 2018-10-19 11:30:28 · 432 阅读 · 0 评论 -
【数据结构】【线段树】2018国庆三校联考D5T3
题意:分析:有一个显然的暴力方法:对每个询问,从左往右做一次,记录前缀和,当某个位置前缀和为负后,则删去当前点。再从右往左做一次。考虑使这个过程变得高效:可以将询问按左端点从右往左排序,然后用栈依次处理每个在从左往右考虑时是否需要删除。再利用线段树,求出没有删除的部分的最小后缀和,其相反数(和0取min)即为从右往左考虑时需要删除的个数。#include&lt;cstdio&gt...原创 2018-10-08 07:09:14 · 131 阅读 · 0 评论 -
【数据结构】【线段树】【字符串Hash】2018国庆三校联考D4T3
题意:分析:题解见标签(不过这题有非正解方法可以卡过去。。我代码附在下面)正解:#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<vector>#define SF scanf#define PF printf...原创 2018-10-07 19:38:54 · 117 阅读 · 0 评论 -
【平衡树】2018国庆三校联考D3T3
分析:#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<assert.h>#define SF scanf#define PF printf#define MAXN 200010#define MOD 1...原创 2018-10-07 17:35:26 · 182 阅读 · 0 评论 -
【贪心】【线段树】【数据结构】AGC011 Train Service Planning
分析:题意理解起来就很恶心的一道题。。。设A火车在每个站台等的时间为PiP_iPiB火车在每个站台等的时间为QiQ_iQi那么,如果两个火车在第x个轨道上不相交,那么就只需要满足:(∑i=0i≤xPi+∑i=0i≤x−1Ai,∑i=0i≤xPi+∑i=0i≤xAi)(\sum_{i=0}^{i\leq x}P_i+\sum_{i=0}^{i\leq x-1}A_i,\sum_{i=0...原创 2018-09-27 08:03:46 · 148 阅读 · 0 评论 -
【线段树】【数据结构】NOIP2017列队
分析:也是很简单的线段树水题。。。再次鄙视了一年前的自己。。。用n+1个线段树,每个位置为0/1表示那个位置的数是否存在。 其中前n个表示每一行(除了最后一个位置) 最后一个表示最后一列。然后可以用动态加点的方式避免TLE和MLE每次选中一个点,把他从所在行的线段树的位置改为0,然后在列线段树上的最后一个位置插入它。 然后询问道列线段树的中对应这次操作的那一行,把它改为0,并...原创 2018-09-15 11:11:22 · 259 阅读 · 0 评论 -
【二分答案】【平衡树】Atcoder ARC101D Median of Medians
分析:答案的单调性是显然的,所以可以二分答案,把最值问题转化为判定性问题。现在要求的就是:满足区间的中位数不超过xxx的区间数量。(x为我们二分的值)定义一个ppp数组,满足pi=pi−1+[ai&gt;x]pi=pi−1+[ai&gt;x]p_i=p_{i-1}+[a_i>x] 说白了就是求出:前i个数中有多少个超过了x那么如果一个序列满足条件,就可以转化为满足这个式子: r...原创 2018-08-25 23:06:41 · 787 阅读 · 0 评论 -
【数据结构】【模拟】HDU6406 Taotao Picks Apples
分析:mmp…lwc讲错题意了害我乱码了半个小时。。。题意搞清楚了其实这题真心容易。把每个询问离线了,按照位置从前往后排序,先处理出每个询问的位置及以前能拿的数量,以及当时的最高高度。然后从前往后加入点,如果当前的高度高于之前的最高高度,则更新最高高度,并且长度++处理询问时,如果这个询问更改后的值高于之前的最高高度,则直接把最高高度改为更改后的值,然后拿的数量+1 如果询问...原创 2018-08-16 08:09:53 · 645 阅读 · 0 评论 -
【线段树】【数据结构】四校联考1024T3
题意分析:没过是因为没看。。。这题其实相当水。。。重新定义一下逆序对:每个点的贡献为,其后面的,比它小的数的个数。然后这样一来,每次排过序之后的点,其后面就不可能有比它小的值了,直接忽略以后排序又排到它的情况。#include<cstdio>#include<cstring>#include<algorithm>#include<ve...原创 2018-10-24 19:30:56 · 131 阅读 · 0 评论 -
【数据结构】【链表】HDU6375 度度熊学队列
分析:链表真好。。。。不用管中间到底谁前谁后。只需要保证两端是合法的。这样反正你都得从两端缩到中间去,缩的时候判断一下,如果是删去右端点,那么判断右端点的左端点的右指针:是否为当前删去的点,不是则交换其指针。这样就能保证端点的指针一定合法。而中间的只需要缩进去的时候更新一下即可。#include<cstdio>#include<cstring>#include...原创 2018-11-01 08:32:03 · 196 阅读 · 0 评论 -
【线段树】「CodePlus 2018 3 月赛」白金元首与克劳德斯
题意:分析:题意好鬼扯。。。非常傻逼的线段树动态开点题。横向移动的矩形和纵向移动的矩形,看起来非常麻烦。由于速度均相等,所以可以以所有纵向移动的矩形为参考系,那么所有纵向移动的矩形都是相对静止的。而此时横向移动的矩形就变成了沿主对角线移动(左上至右下),那么就可以旋转坐标系,变成简单的线段覆盖问题了。即:把每个纵向移动的矩形视为(x+y,x+w+y+h)(x+y,x+w+y+h)(x...原创 2018-12-30 23:13:34 · 130 阅读 · 0 评论 -
【线段树】省选模拟51nod 小朋友的笑话
题目:分析:辣鸡51nod前两题迅速切掉花了1h先写了一个O(nnlogn)O(n\sqrt n logn)O(nnlogn)的算法,T了,开始想->放弃:1h再写了一个O(nlog2n)O(n\log^2 n)O(nlog2n)的算法,又T了,开始想->放弃:2h最后无奈又想了一个O(nlogn)O(n log n)O(nlogn)的算法,没调完GG最后一看O(...原创 2019-03-25 10:46:44 · 291 阅读 · 0 评论 -
【并查集】Baltic2016 Park
分析:很简单的并查集水题。每个圆视为一个点,上下左右四个边界各视为一个点,两点间距离表示:最大能穿过的圆的直径。所以可以先把n2n^2n2条边的预处理出来,然后再把边权从小到大排序,询问的圆也从小到大排序即可。判断一下几个边界是否连通,就能知道它能到达哪些点。只不过卡精度了很难受。。。所以得用longlong二分适合的边权。。。#include&amp;lt;cstdio&amp;gt;#inc...原创 2019-03-06 21:59:41 · 129 阅读 · 0 评论 -
【线段树】【最小生成树】BZOJ5216 [Lydsy2017省队十连测]公路建设
分析:用线段树维护某个区间内的最优边(最多N条)所以复杂度就是O(N∗logM∗Q+MlogM)O(N*logM*Q+MlogM)O(N∗logM∗Q+MlogM)#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector&g...原创 2019-02-28 10:07:54 · 273 阅读 · 0 评论 -
【可持久化线段树】2019雅礼集训 permutation
题目:分析:比较恶心的一道题。首先,将式子转化一下,变成∑APi∗(n−i+1)\sum A_{P_i}*(n-i+1)∑APi∗(n−i+1)这里应该很好理解,无非就是把当前排列倒序,然后计算贡献而已。但是只有这么写才比较容易看出下一步的性质:显然,题目的最小值,必然是当PiP_iPi为升序时(否则可以通过交换一对来得到更小的答案)然后对某个排列,转移到任意其他排列,可...原创 2019-01-09 13:39:43 · 555 阅读 · 0 评论 -
【线段树】【DFN】2019雅礼集训 two
题意:分析:翻译一下题意:给出两个N个点的树,首先选择A树中的一条边删除,然后将所有包含此边的路径u-&amp;gt;v(要求u,v在B树中是相邻的),对应的B树中的边(u,v)删除。由于扯到了子树,显然可以考虑DFN的方法。很明显,路径包含关系在DFN中表示为:对于一条边(u,v),假设深度deepu=deepv+1deep_u=deep_v+1deepu=deepv+1那么所有包含此...原创 2019-01-09 08:36:52 · 299 阅读 · 0 评论 -
【总结】可并堆(左偏树)总结
简介堆:可以查找集合最大值,支持插入元素,以及删除最大元素。可并堆就在此基础上,支持快速合并两个集合的操作。左偏树首先,定义外节点为:其右儿子为空的节点。定义距离为每个点到其子树中最近外接点的距离。现在保证左儿子的距离值必须 不小于 右儿子的距离值。这样,就能保证每个点往右走,走到叶子节点的步数不超过log(n)log(n)log(n)步,其中nnn表示这个节点的子树大小。支持的...原创 2019-01-18 16:41:56 · 191 阅读 · 0 评论 -
【线段树】【枚举】[Code+#3]寻找车位
分析:没见过这么暴力的数据结构题。其实方法很简单:首先,很容易想到一种暴力:枚举一行作为上边界,然后从左到右依次考虑每一列作右边界的情况:假设当前枚举的行为iii,列为jjj,每一列jjj从iii行开始,其下边的连续为1的最大长度为lenjlen_jlenj很容易发现,若对于第j列,其优的左边界k必然满足:lenk≥j−k+1len_k\geq j-k+1lenk≥j−k+1,否则的话...原创 2019-01-03 08:59:42 · 256 阅读 · 0 评论 -
【线段树】2019雅礼集训 sequence
题目:给出k,和一个长度为n的序列A有q次询问,每次询问Al,Al+1,Al+2……,ArA_l,A_{l+1},A_{l+2}……,A_{r}Al,Al+1,Al+2……,Ar中,有多少连续的子序列的&amp;\&amp;&只和为k的倍数。分析:比较水的线段树题。众所周知,与运算的前缀和最多只有logAilogA_ilogAi个值,所以可以预处理出...原创 2019-01-12 11:32:48 · 338 阅读 · 0 评论 -
【数据结构】【平衡树】【贪心】HDU6408 From ICPC to ACM
题意:题意非常的鬼畜。。。 你经营着一家电脑公司,需要满足一些客户的需♂求。每个月,你可以购买电脑配件(误),每单位价格为cicic_i 每个月需要制造didid_i台电脑,每制造一台电脑,需要一单位的电脑配件,然后外加mimim_i的人工费。而且每个月最多制造pipip_i台电脑。然后电脑和配件都可以储存。 从第i个月存到第i+1i+1i+1个月,最多储存eieie_i台电脑,...原创 2018-08-15 22:21:03 · 377 阅读 · 0 评论 -
【点分治】【数据结构】Codeforces1019E Raining season
题意:给出一棵树,每条边的距离都是一个一次函数,给出斜率k和截距m。(y=k*x+m) 现在求当x=0,1,2,……,t-1时,整个图中最远点的距离。分析:这题一股浓郁的OI气息啊。。。(思路简单实现复杂的数据结构题)首先,如果不考虑那个神奇的边权,那么就是一个简单的点分治水题。。。现在考虑加上这个边权,很容易发现,最终答案一定是一个下凸壳。所以可以维护这个凸壳中...原创 2018-08-13 10:35:24 · 583 阅读 · 1 评论 -
【数据结构】【Splay】BZOJ1014&JSOI2008 火星人prefix
题意:动态维护两后缀的最长公共前缀,要支持单点修改,单点插入。分析:本来以为要用什么后缀数据结构。。。结果想了半天无果。才发现这题可以直接字符串hash+Splay水过。。。真是傻了。。。Splay具体操作就是一般的序列Splay。。。每个点维护一个hash值表示它的子树的hash值。#include<cstdio>#include<cs...原创 2018-07-28 23:03:29 · 124 阅读 · 0 评论 -
【树链剖分】QtreeⅣ&QtreeⅤ题解
Qtree4题意:维护一颗树,每个点有颜色(黑/白),最开始均为黑色。满足两种操作: 1,翻转某个点的颜色。 2,询问整棵树上距离最远的两个白色点的距离(带权边)分析线段树存储3个信息: 1,子树内到达左端点的最远距离,记为pl 2,子树内到达右端点的最远距离,记为pr 3,子树内的最远两点间的距离,记为val维护很容易: pl=max(lson.pl,rson.pl+len(l,mi原创 2017-12-19 22:58:58 · 663 阅读 · 1 评论 -
【数据结构】【范浩强Treap】CF702F T-shirt
题目大意:有n件T-shirt,每件T-shirt有一个val值和price值 还有m个顾客,每个顾客有一个最大金额Bi 每个顾客的购买策略是相同的: 他会买他的资金范围内val值最大的一件, 而且每种T-shirt都只能买1次 直到所有的T-shirt他都买不起或者他都买过了,那么n,m<=100000分析其实这道题的难点主要在第一步,就是如何建树, 很容易就会想到用T-shirt来建原创 2017-12-02 18:40:06 · 711 阅读 · 0 评论 -
【数据结构】范浩强Treap(非旋转平衡树)&可持久化Treap总结
范浩强Treap这是一种很神奇的数据结构(似乎我每个数据结构都要这么说) 尽管可能是我的模板太丑了,速度实测出来似乎并不比splay快,不过要做到可持久化的话, 这种数据结构就是首选。 另外,这种数据结构相当好写。简单地说,这种treap基于两种操作: Merge(int x,int y)->将x的子树和y的子树合并起来,且满足 x的子树的最大值小于等于y子树的...原创 2017-12-02 17:52:36 · 3303 阅读 · 1 评论 -
【数据结构&图论】SPOJ Free tour II
题目大意:给出一颗树,有些点被染色过,每条边有一个权值,求这棵树上不经过k个染色点的最长路径(起点终点可以相同)分析:非常裸的点分治,套一个树状数组存储经过k个染色点的最短路径,为了避免卡常,我用了一个更新标记数组,不难实现。#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>原创 2017-12-11 13:41:52 · 163 阅读 · 0 评论 -
【数据结构】可持久化线段树&Trie总结
可持久化:可以访问历史版本的“升级版”的数据结构,利用访问历史版本的性质,可以做到许多在区间上的操作。可持久化线段树:例题: cqoi2111:区间第k大 给定一个长度为n的序列,m个询问,每个询问的形式为:l,r,k表示在[l,r]间中的第k大元素. (n<=100000, m<=100000,1<=l<=r<=n, 1<=k<=r-l+1)如果用线段树来储存某个区间的第i大,显然是原创 2017-11-22 14:12:55 · 1228 阅读 · 0 评论 -
【数据结构&图论】BZOJ1095Hide 捉迷藏
题目大意给出一颗树,每个点都是黑/白色,初始状态每个点都是白色的, 有两种操作: 1,翻转某个点的颜色 2,询问整个图中最远的两个白色点的距离(若没有白色点输出-1,只有一个输出0)分析本题有 动态点分治/线段树储存括号序列 两种做法。 这里只介绍动态点分治的方法。 这个思路其实非常的淳朴,我们考虑对于单次询问,我们需要的操作: 按重心拆分树,对于每个重心,找到能经过该点的最大路径,最后原创 2017-12-09 08:47:10 · 1374 阅读 · 2 评论 -
【最小生成树&LCT】Codeforces603E-Pastoral Oddities
题目大意:给出一个图,求使得这个图中每个点的度数都为奇数。 求出用前i条边,使图满足条件的情况下,最大边权的最小值。分析:SolutionA LCT维护最小生成树很容易发现一些性质: 如果要使得图中每个点度数为奇数,那么每个联通块中点的个数一定为偶数: 根据题目,为了使最大边权最小,我们可以把每个联通块看成它的最小生成树,那么这棵树一定满足:每个非根节点的儿子结点个数必须为偶数,根节点儿子结原创 2017-09-28 10:06:56 · 445 阅读 · 0 评论 -
【Codejam2008_Round1C】C:Increasing Speed Limits
题目大意:给出一个长度为n(n<=500000)数字串a,求这个串中严格递增的序列个数,序列长度可为1分析:什么鬼!上升序列??相比做的前两场的C题,这次的C题在题目类型上就比较温和了,毕竟是很熟悉的DP模型。不难想到,设dp[i]dp[i]为以i为末尾的严格上升序列的个数。 转移就很容易想到了,dp[i]=∑j=1i−1dp[j](a[j]<a[i])dp[i]=\sum_{j=1}^{i-1}原创 2017-07-10 11:42:18 · 115 阅读 · 0 评论 -
【数据结构】树链剖分总结
树链剖分是一种基于树的算法,将树转化为线性结构(如线段树),可以说是一种应用性十分强的算法,并且在近年来的考题中也常常出现。但其实思维上并不是一个很困难的东西,实现起来也非常好写。剖分技巧通常有三种: 1,随机剖分 2,盲目剖分 3,启发式剖分在随机数据的情况下,三者的实际速度并没有太大差别,但如果数据有一定特征,那么前两个方法就会逊色不少。所以启发式剖分就是我们最常用的树链剖分方原创 2017-12-13 12:49:49 · 170 阅读 · 0 评论 -
【树链剖分】BZOJ2243染色
题目大意:给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。分析:其实并没有脱离最基础的树链剖分模板。 同样是树链剖分套线段树,线段树内储存当前区间的不同染色段的个数,以及原创 2017-12-14 18:05:56 · 216 阅读 · 0 评论 -
【数据结构】【Splay】BZOJ1500维修数列
题意:做了一套简单的练习后,用Splay处理区间问题就变得非常容易了。 总的来说,所有的splay有关,涉及区间的问题,都会基于select操作(其实就是根据排名找点)node * find_id(node *x,int k){ pushdown(x); int sz=x->ch[0]->sz; if(sz>=k) return find_id(x->ch[原创 2018-01-01 11:00:55 · 196 阅读 · 0 评论 -
Codeforces483Div1 983E NN country
题意:给出一颗N个点的树,树上有M条链,需要满足Q次询问: 每次询问给出两个点(u,v)(u,v)(u,v),求从u出发,只通过链来行走(即当前位于某条链的某一个点上,就可以移动到这条链的任意一个点上,这定义为一步),求到达v点的最小步数。链可能会重复覆盖某些点,也可能不连通,若无法到达输出-1N,Q,M≤105N,Q,M≤105N,Q,M\leq 10^5分析:首先,有...原创 2018-05-26 23:02:49 · 451 阅读 · 0 评论 -
Codeforces483Div1 983D Arkady and Rectangles
题意:在一个平面上,依次放入N个颜色不同的矩形(可能会覆盖),现在求最终状态下能看到多少种不同温度颜色。注:空白部分也视为一种颜色。 N≤100000N≤100000N\leq 100000分析:这是一道比较有趣的数据结构题: 利用扫描线算法,首先将所有坐标离散化,然后按照正方向枚举x坐标,将每个矩形视作两条线段:...原创 2018-05-26 22:38:25 · 257 阅读 · 0 评论 -
【总结】LCT算法的基础建模与应用
前言:在恶心了几道LCT算法的题后,勉强领悟到一点LCT的用处 作为一个比较经典的数据结构,LCT的应用范围比较广泛,比如动态维护最小生成树,动态维护双联通分量,以及其它的一些动态路径询问的问题。尽管在子树问题上,LCT算法显得有些无力(出门左转找ET),但毕竟很多子树问题可以用DFN+Splay水过,但路径询问,却几乎找不到可以替代LCT的算法。基本概念:LCT算法,其实就本质...原创 2018-03-26 21:26:36 · 1655 阅读 · 0 评论 -
【李超线段树】BZOJ1568[JSOI2008]Blue Mary开公司
前言:这道题是李超线段树的一道模板题,鉴于李超线段树(似乎)应用性并不广,所以就用这道题顺便写写总结。题目大意:题目很鬼畜,一句话题意是: 动态插入一些离散的直线(有斜率),同时询问每条直线在某个点的取值的最大值。算法介绍差不多李超线段树就是干这个用的了我们用一个标记来表示一个区间的最优线段,每次插入一个线段时,设原来的最优线段为l1l1l_1,插入的线段为l...原创 2018-03-13 20:40:25 · 161 阅读 · 0 评论 -
【线段树】Fafa and Array
题意:给出一个长为N的序列,需要支持两种操作: 1、求出在序列中某个位置加上x后,使得 ∑i=1i<n|ai+1−ai|∑i=1i<n|ai+1−ai|\sum_{i=1}^{ial,al+1,al+2……aral,al+1,al+2……ara_l,a_{l+1},a_{l+2}……a_r均加上x分析:这道题是用最优性来满足正确性的典型。首先,我们考虑根据趋势,...原创 2018-03-17 08:21:12 · 182 阅读 · 0 评论 -
【线段树】BZOJ2989 数列
题意:给定一个长度为n的正整数数列a[i]。 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[y]|。 2种操作(k都是正整数): 1.Modify x k:将第x个数的值修改为k。 2.Query x k:询问有几个i满足graze(x,i)<=k。因为可持久化数据结构的流行,询问不仅要考虑当前数列,还要考虑任意历史版本,...原创 2018-02-23 21:40:14 · 225 阅读 · 0 评论