笔记
大大朋友
这个作者很懒,什么都没留下…
展开
-
差分序列
存在一个序列:A = {a1,a2,a3,…,an};这个序列的差分序列 B = {a1,a2 - a1, a3 - a2,…,an - a(n - 1)}; B[i] = A[i] - A[i - 1];差分序列的第i项等于原序列的第i项 减去 第i-1项。 并且原序列为差分序列的前缀和序列。差分序列的一个最大好处: 当原序列的区间减去或加上一个值后, 差分序列只需O(1)的时间维护这个改变。A 序列在[L,R]这个区间中的元素减少了 K, 那么 B[L] -= K; B[R + 1]原创 2020-08-02 11:04:35 · 2089 阅读 · 0 评论 -
对顶堆 随笔
对顶推用二个堆实现,能够在nlog(n)的时间复杂度内找出,数组中第 K 小的元素。把堆中的大根堆想成一个上宽下窄的三角形,把小根堆想成一个上窄下宽的三角形,那么对顶堆就可以具体地被想象成一个“陀螺”或者一个“沙漏”,通过这两个堆的上下组合,我们可以把一组数据分别加入到对顶堆中的大根堆和小根堆,以维护我们不同的需要。priority_queue<int,vector<int>, less<int>> up; //大根堆priority_queue<int,原创 2020-07-28 10:45:18 · 126 阅读 · 0 评论 -
RMQ算法(静态区间查找算法)
含义:RMQ(Range Minimum/Maximum Query),即区间最值查询,对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。RMQ 算法: 静态的线段树, 不支持修改, 只支持查询。算法思想:将数组分为一个一个的静态区间,将这些静态区间的最大值找出来,并保存。设方程f(v,j): 数组第v位开始往后的2^j个位置的最大值。状态转移方程:f(v,j) = max{f(v,j原创 2020-07-27 21:53:19 · 216 阅读 · 0 评论 -
数据结构——二分图(leetcode 785)
二分图的判断:leetcode 785(AC代码在下面)二分图的定义:二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。二分图的判断(该图是否为二分图):链接矩阵表示的图的判断:[染色法 ] :选定图中的某一节点,将此节点染成黑色,将他的邻接点都染成红色;算法结束后,图中任意一节点(已经被染色)原创 2020-07-16 14:51:17 · 539 阅读 · 0 评论 -
最长上升子序列(Longest Increasing Subsequence,LIS)的一种变形,求最长上升子序列有几个
int getLis(){ int a,b[10000]; int cnt = 0; b[0] = 0; for (int i = 0; i < n; i++) { scanf("%d", &a);//一个一个的输入序列 if (b[cnt] <= a) { cnt++; b[cnt] = a; } else { int pos = lower_pound(b, b + cnt, a) - b; b[p原创 2020-05-29 15:23:05 · 135 阅读 · 0 评论 -
公共子序列
本文内容参考如下:【1】 https://blog.csdn.net/lyy289065406/article/details/78702485;【2】《算法导论》第3版 15.4节最长公共子序列(longest common sequence):即一个给定的序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果。和最长公共子串(longest common substring):给定串中任意个连续的字符组成的子序列称为该串的子串。、给一个图再解释一下:2.动态规划求解LCS问题,原创 2020-05-19 17:59:30 · 3422 阅读 · 0 评论 -
笛卡尔坐标变换: UVA1602
笛卡尔坐标变换的基本知识:坐标标准化:找到最小的x,y值,然后让所有坐标点减去该最小值,得到标准化的坐标平移:将所有坐标标准化之后,就无需再判断平移翻转:关于x轴的翻转(x,y)-> (x,-y); 关于y轴的翻转(x,y) ->(-x,y); 关于y的翻转是x轴翻转后旋转270度得到,反之亦然。旋转:顺时针旋转 90度(x,y) -> (y,-x); 逆时针旋转就是顺时针的补角;模板: 标准化笛卡尔坐标; 判重; 操作(平移,翻转,旋转); 再次标准化笛卡尔坐标;原创 2020-05-17 22:46:27 · 1676 阅读 · 0 评论 -
UVA 1374,迭代加深搜索模板
用已经有的元素进行加、减搜索,进行定位; 先加、后减;并且总是用“刚刚得到”的那个数,进入下一层: for(int i = d; i >= 0; i--) { a[d + 1] = a[d] + a[i]; //先加,d是刚刚得到数字的下标 if(dfs(d + 1, maxd)) return true; a[d + 1] = a[d] - a[i]; //后加。d是刚刚得到数字的下标 if(dfs(d + 1, ma原创 2020-05-09 16:49:39 · 216 阅读 · 0 评论