wtpavssite

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2026秋季上学期第一周

周一

小tip:

局部变量是存储在栈上的,所以用比较大的静态数组开在局部变量可能会爆栈,如果用vector就不会爆栈,因为vector是存储在堆上面,或者把静态数组开在全局。

周二

非退化凸多边形的充要条件

最长的一条边大于这个多边形剩下的所有的边之和,这个考点考的并不多

事件点的优化思想

假设在一个时间轴上具有一些状态,如果我们需要得到每个事件点的信息需要O(n)循环一次,如果得到信息还需要额外的时间,时间开销会乘上O(n),但是如果这些我们需要得到的信息具有某种规律,在事件点的视角下就是存在一些特殊地时刻叫做事件,信息在事件的时刻会发生变化,而在两个相邻的事件时刻之前这些信息是不会发生变化的,那么我们可以使用这种优化方式来优化时间复杂度。
这是我第一次听说这个名字还没有懂得其中的意思,也还没用来做过题

周三

unique

接受两个参数,first和end作为容器的范围,把这个范围内的所有数字不同的都排到左边,剩下的有重复的全部弄到右边,返回值是第一个重复的数字的位置。常用来离散化

树状数组计算逆序对

之前所学的树状数组是用来动态维护前缀和,我们也是用前缀和来计算逆序对,要做到这个我们需要一个离散化过的原数组的版本来查找数组种当前这个数字的排名。我们从数组的尾巴向前开始,对于当前原数组的数字,我们找到他在离散化后的数组的排名,得到他的rank,然后在树状数组中找到比这个排名小的数组的前缀和(这里的树状数组用来计算排名1~k的数字在当前出现过多少次)。因为我们是从左到右插入数字,当第i个数字被查看右边比自己小的数字的时候,所有在i右边的数字都是已经被加入了数组,左边的都没加入,所以得到的逆序对是正确的。

周四

线段树的非递归处理

这种线段树叫做zkw线段树,和普通的线段树的区别是,zkw线段树是用了一个满二叉树,对于所有的叶子节点都在树上的同一层,并且这些节点在树上的编号和原数组的差是固定的。假设我们有一个大小为n的数组,我们找到第一个大于等于这个n的数字m是2的次幂,那么这个线段树的大小就是n + m + 1。和普通线段树类似一个节点p的左子节点(如果有)就是p << 1,父节点就是p * 2,但是差别是一个数字在原数组的位置是i,那么他在skwtree中的位置就是i + m,而对于每个节点都是如此。
那么特点介绍完了,什么是非递归?
普通的线段树要更新子节点之类的都是通过递归实现的,由于skwtree的特点,我们不用递归也是实现同样的功能,比如普通线段树要query一个区间的和,因为我们知道这个区间在原数组的位置,所以在zkwtree中的位置也是知道的,我们用循环结构就能做到递归的功能。
因为这是我第一次听说这个数据结构,所以类似普通线段树的pushdown下传懒标记我今天还不知道怎么实现,总结一句,这个zkwtree和普通的segtree思想是一样的,我觉得好处在于不用敲那么多代码

posted on 2026-08-31 21:58  wt_pav  阅读(3)  评论(0)    收藏  举报