随笔分类 -  数据结构

摘要:题意:给你n组操作,分别为压栈,出栈,询问栈顶元素。每一组操作有一个时间戳,每次询问栈顶的元素的操作询问的是在他之前出现的操作,而且时间戳小于它的情况。题目中不会出现栈为空而且出栈的情况。 例如: push 100 1 peak 6 push 200 5 询问的结果是100。 思路:先把时间戳离散化 阅读全文
posted @ 2019-03-11 15:18 维和战艇机 阅读(205) 评论(0) 推荐(0)
摘要:题意:给你一个长度为n的序列和m组区间操作,每组区间操作可以把区间[l, r]中的数字都-1,请选择一些操作(可以都不选),使得序列的最大值和最小值的差值尽量的大。 思路:容易发现如果最大值和最小值都在某个操作区间里,那么这个操作没有意义,因为差值没变,所以我们可以想到暴力枚举每一个位置,假设这个位 阅读全文
posted @ 2019-01-25 17:35 维和战艇机 阅读(565) 评论(0) 推荐(0)
摘要:参考链接:https://www.cnblogs.com/zzqsblog/p/6146916.html 树上启发式合并可以在O(nlogn)的时间内解决很多关于树的无修改询问,比如每颗子树中出现的最多的颜色等。 树上启发式算法流程: 1 先dfs一次,记录每个节点的重儿子。(和树剖的预处理差不多) 阅读全文
posted @ 2019-01-14 23:33 维和战艇机 阅读(245) 评论(0) 推荐(0)
摘要:题意:让你维护一个序列,支持以下6种操作: ADD x y d: 第x个数到第y个数加d 。 REVERSE x y : 将区间[x,y]中的数翻转 。 REVOLVE x y t :将区间[x,y]循环移位t次,如1 2 3 4 5 旋转2次后就变成4 5 1 2 3 。 INSERT x p : 阅读全文
posted @ 2019-01-08 13:33 维和战艇机 阅读(402) 评论(0) 推荐(0)
摘要:题意和分析在之前的链接中有:https://www.cnblogs.com/pkgunboat/p/10160741.html 之前补题用三维偏序的cdq的分治A了这道题,但是感觉就算比赛再次遇到类似的题可能写不出cdq的代码。。。这次算是自己独立A的了。。。 如果这题不卡常的话,什么树套什么树都可 阅读全文
posted @ 2019-01-04 16:47 维和战艇机 阅读(292) 评论(0) 推荐(0)
摘要:题意:n个人站成一排,初始时刻每个人手中都有一个图案,可能是石头,剪刀,布3个中的1种,之后会随机选取相邻的两个人玩石头剪刀布的游戏,输的人会离开(如果两个人图案相同,则随机选择一个人离开)。执行(n-1)次操作剩下的最后一个人是冠军,问有多少个人可能成为最后的冠军?并且还有m次修改,每次修改会改变 阅读全文
posted @ 2018-12-26 15:04 维和战艇机 阅读(321) 评论(0) 推荐(0)
摘要:题意:给你一个n*m的矩阵,需要在不改变每一行和每一列的大小关系的情况下压缩一个矩阵,压缩后的矩阵所有数的总和尽量的小。 思路:我们有这样的初步设想:对于在一行或一列的数x,y,若x<y,则建立一条x的位置到y的位置的边。之后进行拓扑排序的DP即可。然而会被卡边数卡掉,所以需要其它的解法。 新思路: 阅读全文
posted @ 2018-12-25 22:40 维和战艇机 阅读(223) 评论(0) 推荐(0)
摘要:题意:给你两个数组a和b,a,b都是一个n的全排列;有两种操作:一种是询问区间在数组a的区间[l1,r1]和数组b的区间[l2,r2]出现了多少相同的数字,另一种是交换数组b中x位置和y位置的数字。 思路:我们可以建立数组b对数组a的映射mp,mp[x]表示数组b中x位置的数在数组a中出现的位置,这 阅读全文
posted @ 2018-12-22 13:07 维和战艇机 阅读(412) 评论(0) 推荐(0)
摘要:题意:给你一颗以1为根节点的树,初始所有节点的权值为0,然后有m个操作,每个操作将点x的所有距离不超过d的节点权值+1,问经过m次操作后每个节点权值是多少? 思路:如果是一个序列,就可以直接用树状数组做,但这是一颗树,所以我们可以想办法把它转化成序列。我们可以先求出每个节点的dfs序,以及深度和子树 阅读全文
posted @ 2018-11-13 23:26 维和战艇机 阅读(391) 评论(0) 推荐(0)
摘要:双端队列BFS解决的就是路径权值可能为0的图最短路问题,权值为0插入队头,否则插入队尾。 对于这个题,可以看作上下移动的路径的权值为0,左右移动权值为1,而且不能超过规定的步数。 直接广搜求覆盖的点的数目即可。 (场上我一般BFS被hack了) 代码: 阅读全文
posted @ 2018-10-15 00:04 维和战艇机 阅读(517) 评论(0) 推荐(0)
摘要:方法:指针扫描数组 每次选择树的重心作为树根,从树根出发进行一次DFS,求出点到树根的距离,把节点按照与树根的的距离放进数组d,设置两个指针L,R分别从前、后开始扫描,每次满足条件时答案累加R-L。,之后减去子树的满足条件的情况,删除根节点,对其子树继续上述操作,不断累加答案。 代码: 阅读全文
posted @ 2018-09-26 21:45 维和战艇机 阅读(195) 评论(0) 推荐(0)
摘要:题意:给定平面直角坐标系中的N个矩形,求它们的面积并。 题解:建立一个四元组(x,y1,y2,k).(假设y1<y2)用来储存每一条线,将每一条线按x坐标排序。记录所有的y坐标以后排序离散化。离散化之后线段树的第i个叶子节点储存的是y[i+1]-y[i]. 这里的线段树用的是一个不用下传延迟标记的做 阅读全文
posted @ 2018-09-21 21:09 维和战艇机 阅读(252) 评论(0) 推荐(0)
摘要:设读入的数组是a,树状数组用来维护a数组区间和sum,线段树用来维护一个另一个数组ssum的区间和,区间每个点a[i]*(n-i+1),那么l-r的答案是l-r的ssum-(n-r)*(sum[r]-sum[l-1]) (纸上画一下就知道了) 阅读全文
posted @ 2018-09-09 20:26 维和战艇机 阅读(212) 评论(0) 推荐(0)
摘要:线段树,假设求(x1,y1)点的贡献,就找所有比该点出现时间晚,且x坐标大于x1的点中y最大的,贡献就是Y-y1,由于题目条件限制,不可能有x坐标大于(x1,y1)且y坐标大于y1的点,所以贡献肯定为正。 思路参考了这篇博客:https://blog.csdn.net/qq_39599067/art 阅读全文
posted @ 2018-09-09 20:20 维和战艇机 阅读(241) 评论(0) 推荐(0)
摘要:题目大意:给你一个数组,数组是经过q次区间覆盖后的结果,第i次覆盖是把区间内的值赋值为i,其中有若干个地方数值未知(就是0),让你判断这个数组是否可以经过覆盖后得到的,如果可以,输出任意一种可行数组。 思路:不合法的情况只有2种。1:两个相同的数字中间出现了比它小的数字,比如: 6 5 6 就不合法 阅读全文
posted @ 2018-08-18 18:23 维和战艇机 阅读(249) 评论(0) 推荐(0)
摘要:在杜教直播中得知2018多校第八场第10题和这个题很相近,所以先补这个题。 代码和思路借鉴了这篇博客:http://hzwer.com/6746.html。 这题是询问从原点能看到的楼房数目,首先对某一个点修改后,对之前的点没有影响,所以只需要处理后面的点,而后面的点分为两种情况: 1:查询区间的左 阅读全文
posted @ 2018-08-17 12:03 维和战艇机 阅读(218) 评论(0) 推荐(0)