数据结构
文章平均质量分 51
光球层上的黑子
是个菜狗
展开
-
cf1567E Non-Decreasing Dilemma套路线段树
题目链接https://codeforces.com/contest/1567/problem/E题意维护数据结构,要求支持单点修改,区间查询递增子数组(连续)个数。思路一眼就很套路的线段树题目。单点修改不谈,直接考虑如何维护答案。首先明确长度为k的递增数组,答案是1累加到k,为方便起见,我们记录k的累加为s_k。考虑答案的pushup部分,如果左区间最右大于右区间最左,那么答案就是左子树和右子树的和,否则的话,我们需要算上新增的情况。具体来说,如果左边区间最右有rc个递增,右区间最左有lc原创 2021-09-10 00:33:50 · 259 阅读 · 0 评论 -
cf1311F 树状数组,二维偏序
题目链接https://codeforces.com/contest/1311/problem/F题意数轴上有一些点,各个点有速度,问任两个点之间最短距离和思路a为位置(正),v为速度考虑i和j两个点,令ai<aj,容易发现只有vj>=vi时才能保证两个点不相遇,否则一定相遇。对于相遇的点,他们的距离是0,否则距离为初始距离。那么我们需要统计出所有ai<aj,vj>=vi的ij初始距离。这个是一个标准的二维偏序。说下什么是二维偏序,偏序是反对称,传递,自反的关系。二原创 2021-08-20 21:09:21 · 167 阅读 · 0 评论 -
cf 337b 二分 优先队列 贪心
题目链接https://codeforces.com/contest/377/problem/B题意m个bug,n个学生。学生和bug都有等级,等级大于等于bug的学生才能解决这个bug。每个学生只要出手就得付钱(多次出手支付一次),一个学生一天一个bug。给出最大预算,是否可以解决全部bug?如果可以的话,输出最省时间的解决方案。思路我们如果确定了限制天数,那么我们就可以贪心的解决问题。假如当前为k天完成,那么我们维护一个学生集合,这个集合内都是能解决当前最大等级bug的学生,我们拿出里面花费原创 2021-06-29 12:15:50 · 275 阅读 · 0 评论 -
cf 375b 思维,双端队列
题目链接https://codeforces.com/problemset/problem/375/B题意给出01矩阵,可以交换行,问可求得纯1子矩阵最大面积思路对于每个1,预处理出向右最大能到达的1的位置r。双端队列可以实现。左到右枚举每一列,将这一列每一行的r插入数组,排序,之后遍历更新答案即可。代码#include<cstdio>#include<iostream>#include<iomanip>#include<map>#in原创 2021-06-29 10:28:37 · 174 阅读 · 0 评论 -
cf547B 单调栈
题目链接https://codeforces.com/problemset/problem/547/B题意长为n数组,一个长为组合是说长为x的连续串,一个组合的权值是他最小元素的值。现在问你对于1-x的每一个长度i,i组合的最大权是多少。思路单调栈我们考虑一个数字对答案的影响。如果要这个数字对组合贡献答案,那么他一定要是组合里最小的数字,因此我们对于每一个数字,维护它左右两边第一个小于它的数的下标l和r,也就是维护一下他为最小值的连续区间。假如这个区间长为len,这个数是a,那么我们就可以对1-原创 2021-06-28 22:08:47 · 409 阅读 · 0 评论 -
cf 92D 单调栈 二分
题目链接https://codeforces.com/problemset/problem/92/D题意给n个数,问每个数后最远的比他小的数跟他的距离减1,不存在为-1思路看题钻逆序牛角尖了,仔细分析一下,从后往前看,对于ai和aj,如果i<j但ai>aj,显然ai一点用没有。因为他不可能产生比aj更优的答案。因此从后往前维护一个递减的单调栈,如果当前数字比栈顶小,压栈,答案为-1,否则根据刚刚分析的,它不会令答案更优,直接二分搜它的答案即可,不用压入栈。教训/收获单调栈,单调队列原创 2021-06-28 20:09:48 · 339 阅读 · 0 评论 -
P1456 Monkey King 左偏树模板题
题目链接https://www.luogu.com.cn/problem/P1456题意n只猴子有自己的力量值s,对于每个操作 x,y,在x和y猴子的猴群中分别选出力量最大的猴子,将力量值/2,之后将两个猴群合并。如果本来就在一个猴群,输出-1.思路类似并查集的联通属性和合并操作+维护块内最值以及修改=可并堆思路很清晰,对于两个堆,弹出堆顶,处理值,重新合并回去,再合并两个堆就可以了。每次merge用一些中间变量记录堆顶就可以了,但板子里的pop函数是没有返回堆顶的,这个要改一下。代码#i原创 2021-04-15 22:30:52 · 235 阅读 · 0 评论 -
可并堆/左偏树算法总结
可并堆又名左偏树顾名思义,可并堆是一个可以高效合并的堆结构。它可以在O(logn)的复杂度下实现删除,查找最小值,合并的操作。但注意可并堆的复杂度很假…因为其树高可以被卡到O(n)很多时候会被卡性质dist我们定义左右儿子任一为空的节点为外节点,空节点也是一个外节点。定义某节点dist的值为其子树中外节点到它最近的距离,定义空节点的dist值为-1,显然我们能知道外节点的dist值为0左偏树是这样的一棵树:满足堆的性质,同时任一节点,其左节点的dist大于其右节点的dist,那么我们显然原创 2021-04-13 22:26:47 · 170 阅读 · 0 评论