随笔分类 - 数据结构
摘要:势能线段树浅析:link 这里我们介绍一下经典例题以及做法。 模板做法: 由于势能线段树的性质,某些区间的值在减小一定次数之后会到达一个定值(或某区间修改次数存在限制),所以我们在递归调用线段树只需要判断左区间和右区间是否还需要修改权值。最后我们只需要在根节点进行修改,然后把需要维护的答案上传即可。
阅读全文
摘要:堆:一个父节点一定不大于(不小于)子节点的树形数据结构。 支持 插入元素,删除元素,查询最大/最小的元素。 前两者操作复杂度为 \(O(\log n)\) ,查询操作复杂度为 \(O(1)\) 。 优先队列(STL) 大根堆:priority_queue heap; 小根堆:priority_que
阅读全文
摘要:单调栈 定义:内部元素满足单调性的栈。 用途:线性时间内处理出数组中每一个 \(i\) 左边/右边 第一个 大于/小于 \(a_i\) 的位置。 模板题:P5788 【模板】单调栈 题意:令 \(f(i)\) 为 \(i\) 右边第一个大于 \(a_i\) 的位置。输出 \(f(i)\) , \(i
阅读全文
摘要:势能线段树其实就是对于一些数据结构题,我们察觉到其中存在一些规律: 一段区间或某个点的修改次数不会超过 \(k\) 次, \(k\) 的值很小或为一个常数。 这样我们就可以在这个点修改了 \(k\) 次之后让它不再修改。 详解可见 link 。 这里我们转载一下其中最重要的几句话: 我们知道,线段树
阅读全文
摘要:莫队:著名 \(O(n\sqrt{n})\) 离线算法,思想基于分块。 做法 令 \(t = \sqrt{n}\) ,将区间左端点分成 \(t\) 块,按块从小到大排序,再将块内按从小到大排序。即: bool compare(node s1 , node s2){ if(s1.x / t < s2.
阅读全文
摘要:题意理解及思路转换详见:link 同样的道理,我们只需要预处理出来 \(nxt\) 数组和 \(del\) 数组,然后直接莫队维护就可以了。 摆一段最关键的函数吧: void work(int l , int zx){ if(dq[a[zx]].empty()) { nb[a[zx]] = fals
阅读全文
摘要:题意理解: 有一段数列 \(a_1\) ~ \(a_n\) , 不同数字代表不同颜色 。共 \(q\) 次询问,每次询问为: 在 l 到 r 之间每次可以先选定一个颜色 \(k\) , 然后删除 位置 形成 等差数列 且颜色为 \(k\) 的一组点。删除一次后可重排序列,问最少多少次可以删除完整个序
阅读全文

浙公网安备 33010602011771号