自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 可并堆(左高树、左偏树)

可并堆(左高树、左偏树)左偏树相对于二叉堆,其插入,弹出,合并的时间复杂度都是对数级别的。高度优先左偏树(HBLT)考虑一颗二叉树,将其叶子节点的子节点补全,那么原来有的节点叫做内部节点,新增加的节点叫做外部节点。令s(x)s(x)s(x),等于节点xxx到任意外部节点的最短路径的长度。外部节点的s(x)s(x)s(x)的值为000,叶子节点的值为111。其递归定义为:s(x)=min⁡{s(L),s(R)}+1s(x) = \min\{s(L),s(R)\} + 1s(x)=min{s(L),s

2021-07-28 15:05:06 365

原创 树哈希(Tree Hash)

树哈希(Tree Hash)顾名思义,对树进行哈希,经常判断两个树是否同构。一下均为对有根树的算法,而无根树只需要找重心无权树方法一fnow=sizenow×∑fson(now,i)×seedi−1 f_{now}=size_{now} \times \sum f_{son(now,i)}\times seed^{i-1} fnow​=sizenow​×∑fson(now,i)​×seedi−1其中 fxf_xfx​ 为以节点 xxx 为根的子树对应的哈希值。特殊地,我们令叶子节点的哈希值为 11

2021-07-26 16:01:50 4585

原创 计算几何——距离平面上最近的点对

计算几何——距离平面上最近的点对P1429给定平面上 nnn 个点,找出其中的一对点的距离,使得在这 nnn 个点的所有点对中,该距离为所有点对中最小的。分治法算法每次输入的参数为P⊆QP \subseteq QP⊆Q,数组XXX和YYY,其中PPP为待解决的点集合,QQQ为全体点集,XXX是PPP按照xxx坐标排序的结果,YYY是按照yyy排序的结果.如果∣P∣=1|P| =1∣P∣=1,那么过程返回∞\infty∞。如果∣P∣=2|P| = 2∣P∣=2,那么返回这个点对的距离。如果∣P∣&

2021-07-21 23:48:32 658

原创 动态规划——悬线法

动态规划——悬线法悬线法用来求解最大子矩形问题。极大悬线:以某个点为悬线的下端点,一直往上延伸的最大可行宽度为111的线段。左右扩展:将极大悬线向左向右进行最大化扩展。因此定义变量h[x]h[x]h[x],l[x]l[x]l[x]和r[x]r[x]r[x],分别表示极大悬线的高度,左扩展的边界,右扩展的边界。例题P1169 棋盘制作#include <bits/stdc++.h>#define FR freopen("in.txt", "r", stdin)using

2021-07-20 21:50:22 234

原创 2-SAT适定性问题与逻辑图

2-SAT适定性问题与逻辑图逻辑图逻辑图是一种有向图,图中每一个节点代表了一个命题,如果命题aaa是命题bbb的充分不必要条件,那么在aaa和bbb之间就存在一条有向边a→ba \to ba→b。如果aaa和bbb互为充要条件,那么aaa和bbb之间存在双向边。构建逻辑图可以为我们通过图论解决命题之间的关系等问题,例如2-SAT问题。2-SAT适定性问题SAT 是适定性(Satisfiability)问题的简称。一般形式为 k - 适定性问题,简称 k-SAT。而当 k>2k > 2

2021-07-15 11:35:11 453 2

原创 格雷码介绍

格雷码介绍典型的二进制格雷码(Binary Gray Code)简称格雷码,因1953年公开的弗兰克·格雷(Frank Gray,18870913-19690523)专利“Pulse Code Communication”而得名,当初是为了通信,现在则常用于模拟-数字转换和位置-数字转换中。法国电讯工程师波特(Jean-Maurice-Émile Baudot,18450911-19030328)在1880年曾用过的波特码相当于它的一种变形。1941年George Stibitz设计的一种8元二进制机械

2021-07-14 16:54:39 3211

原创 计算几何——扫描线算法

计算几何——扫描线算法面对一个几何图形,计算机通过向某一个方向进行单线扫描,进行图形处理的方式叫做扫描线算法。事件和事件处理程序扫除线算法中最重要的就是对事件(Event)的处理。一个事件定义为当扫除线碰到点、边界、线等产生的进入或退出事件。例如下图:当扫描线碰到某一个矩形的左边界时将会产生一个进入事件,之后处理程序将对这个进入事件进行处理。又或者当扫描线碰到某一个矩形的右边界时将会产生一个退出事件,之后处理程序将对这个退出事件进行处理。一般的,我们将整个事件列表中的事件进行按照扫除线的

2021-07-13 10:43:26 5026

原创 离线莫队算法

离线莫队算法离线莫队算法用于解决区间查询问题,核心思想是,如果我们已知区间[l,r][l,r][l,r]内的答案,如果我们能在O(1)O(1)O(1)时间内转移到[l,r+1][l,r+1][l,r+1],[l,r−1][l,r-1][l,r−1],[l−1,r][l - 1,r][l−1,r]或者[l+1,r][l + 1,r][l+1,r]即相邻区间内,那么我们就可以通过这种区间转移的方式求出所有区间的答案,其核心还是尽可能的利用已知,而不是去重复求解。区间转移我们设计双指针算法,利用lll和rr

2021-07-09 11:14:00 309

原创 摩尔投票法

摩尔投票法任给无序投票记录,在O(n)O(n)O(n)时间复杂度内,O(1)O(1)O(1)空间复杂度内找到票数最多的候选者,该算法称为摩尔投票法,用于求众数。过程定义两个变量candcandcand和cntcntcnt,分别为当前候选人和候选人的票数,初始化均为000,之后我们依次扫描这个投票记录,如果cntcntcnt为000,那么让candcandcand成为当前记录的候选者,并将cntcntcnt加111。如果遇到相同候选者的投票,那么将cntcntcnt加1,否则减111。这个阶段叫做pai

2021-07-09 09:45:58 101

原创 三指针尺取法

三指针尺取法双指针尺取法只能维护单一区间的答案,有时我们需要维护两个区间的答案,这时候就需要三指针尺取法。通常来说,用一个指针代表共用的区间右端点,另外两个区间分别表示两个区间左端点。例题LeetCode 930class Solution{public: int numSubarraysWithSum(vector<int> &nums, int goal) { int l1 = 0, l2 = 0, r = 0; int

2021-07-08 19:49:42 117

原创 线段树进阶

zkw线段树zkw线段树由清华大学张昆玮(zkw)发明,相较于普通线段树,其优点有:非递归,时间常数小使用二进制思想,代码短,方便书写建树我们强制要求叶子节点(即区间大小为1的节点)排列在最后一行,并且还是一颗满二叉树(多余的节点不用)。这样我们就可以写出建树的代码,此时只更新了叶子节点的信息,我们没有更新非叶子节点的信息。void build(int n){ // 寻找最后一行的大小,也是非叶子节点的大小 for (M = 1; M < n + 2; M &lt

2021-07-07 19:56:07 219 1

原创 卢卡斯Lucas定理

卢卡斯Lucas定理LUCAS\mathscr{LUCAS}LUCAS内容(nm)≡(⌊np⌋⌊mp⌋)⋅(nmod  pmmod  p)mod  p\binom{n}{m} \equiv \binom{\lfloor \frac{n}{p} \rfloor}{\lfloor \frac{m}{p} \rfloor} \cdot \binom{n \mod p}{m \mod p} \mod p(mn​)≡(⌊pm​⌋⌊pn​⌋​)⋅(mmodpnmodp​)modp其中ppp为质数。上式

2021-07-06 21:00:08 298

原创 伸展树(Splay)

伸展树(Splay)Splay 是一种二叉查找树,它通过不断将某个节点旋转到根节点,使得整棵树仍然满足二叉查找树的性质,并且保持平衡而不至于退化为链。它由 Daniel Sleator 和 Robert Tarjan 发明。旋转旋转(Rotate)的最终目的是将该节点的深度−1-1−1并且保证二叉搜索树的结构不改变。根据节点xxx是父节点的左子节点或者是右子节点分为右旋和左旋转。我们以右旋为例,我们发现,如果我们想让节点XXX的深度−1-1−1,我们必须让XXX做ZZZ的子节点,至于是左右子节点,

2021-07-06 13:50:36 290 1

原创 树查询算法

树上差分思想是将树看成是相交线段进行差分。分为点差分和边差分。通常需要结合LCA来实现。其实更推荐树链剖分,树链剖分可以很好的把LCA和线性结构组合在一起。点差分以统计一条路径上经过的点的次数为例子。我们定义节点xxx的差分变量:diffx=valx−∑s∈sonxvals\text{diff}_x = \text{val}_x - \sum_{s \in \text{son}_x} \text{val}_sdiffx​=valx​−s∈sonx​∑​vals​我们有路径δ(s,t)\del

2021-07-05 15:08:51 477

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除