学习笔记
学习
李ac
李wa
展开
-
找矩阵第k大的数、力扣 1508. 子数组和排序后的区间和
如何在有序矩阵中找第k大的数?378. 有序矩阵中第K小的元素 题目链接一个矩阵从左到右递增、从上到下递增怎么找第k大的数?1、 把矩阵变成一维然后排个序2、 合并有序数组那样合并3、 二分主要说二分怎么求。二分一个第k大是多少。check的时候,也就是判断有没有k个数大于等于mid比mid小的肯定在是左上角一些元素。比如这样一个矩阵:如果mid是12的话:就有左上角这样一些:这样的话就可以用n+n的时间快速统计出来有多少个数大于等于mid!!(明明可以暴力的)int su原创 2020-08-05 01:56:11 · 944 阅读 · 0 评论 -
珂朵莉树
珂朵莉树(老司机树)别人的博客。。看别人博客学的,链接在上面。算法比较暴力,应该都看得懂主要用set实现一般什么时候用?推平一段区间(把区间里的数变为一个数)数据随机(数据水)哈哈哈哈哈哈哈具体实现存的东西mutable :可变的,set中的东西只能读不能改。但是加上这个也可以改。因为不知道这个,ce的我快崩溃了struct Node{ int l,r;//区间 mutable ll v;//值 Node(int lp,int rr = -1,ll vv = 0):l(l原创 2020-05-22 20:21:13 · 178 阅读 · 0 评论 -
偏序问题 cdq分治
偏序问题b站学习链接偏序问题是什么?比如要找比当前数小的个数,如果有两个值呢?要求ai <= aj && bi <= bj 的i的个数三个呢?ai <= aj && bi <= bj && ci <= cj说的可能不清楚,, 语言表达不够。。但是没关系,我看得懂就行 hhhhhhh一维的:一维排个序...原创 2020-04-19 23:02:54 · 172 阅读 · 0 评论 -
线性基
线性基线性基是什么?是一个数的集合。原数组中的每个数都可以由这个集合里的树异或得到。也就是原数组的压缩。学习参考:大佬博客b站视频性质1、原数组里的数可以由线性基里的数异或得到。所以原数组里的一些数的异或也可以由线性基里的一些数异或得到。2、线性基里的任意数异或起来都不可能为0,3、线性基里的数的个数是确定的,满足性质的前提下是最少的。(插入顺序改变但是线性基里的数的个数不会...原创 2020-04-17 14:26:29 · 111 阅读 · 0 评论 -
树上启发式合并 cf600E
树上启发式合并这个是啥?先说一下并查集的启发式合并:并查集的启发式合并就是把集合小的并到集合大的上去。(按秩合并是把低的并到高的上面去)于是树上的也差不多: 就这样一个优化的思路。把大的并到小的上去树上:什么是大的:重儿子的那个子树。小的: 轻儿子的那几个子树。就是算答案的时候把轻儿子的贡献并到重儿子的贡献上去于是就有了当前根节点的答案。说说例题吧:cf600E题目大意:给...原创 2020-02-05 21:44:21 · 163 阅读 · 0 评论 -
吉老师线段树 hdu5306
吉老师线段树这个是干啥的?其实就是个线段树,我也不知道为什么叫吉老师线段树简单例题:hdu5306三种操作:0 l r x 把 l ~ r 区间里大于 x 的数变成 x1 l r 求 l ~ r 区间里的最大值2 l r 求 l ~ r 区间和题解:线段树里记一个最大值max、最大值的个数num、次大值max2、区间和sum。查询很好查询,主要是维护更新:如果当前区间最大...原创 2020-01-23 17:24:13 · 787 阅读 · 0 评论 -
替罪羊树学习笔记哦
替罪羊树替罪羊树 是啥? 就是一个平衡树,只不过没有旋转操作那遇到不平衡的咋办呢? 重构。怎么重构?先求出不平衡子树的中序遍历(这个中序遍历肯定是有序的递增的)于是就可以分治建树,取中间那个点当根左边的当左子树、右边的当右子树……递归下去于是就把不平衡的子树变成平衡的子树。例题:洛谷模板 P3369几种操作结构体存的信息:struct Node{ int l,r;//左右...原创 2020-01-06 20:24:18 · 101 阅读 · 0 评论 -
分块 简单的
分块分块是啥? 暴力?以前看分块看了一半,放在那里了,,今天想起来了,就又看了一下分块的思想:把n分成根号n块然后暴力,这也没啥,主要是记录一下大段: 被分成的块 一大块假设要维护的区间是 l~r 把在这个区间里的大段区间暴力维护一下,把两旁的不是一整段的小段暴力维护就好。时间复杂度:根号n例题:acwing 243题目是 给出一个数组 两种操作:Q l r 查询l~r的区间...原创 2019-12-31 13:58:25 · 101 阅读 · 0 评论 -
差分约束
我的第一道差分约束poj 3169差分约束加b啥啥的那个找负环的算法 Bellman-Ford#include <stdio.h>#include <algorithm>#include <vector>using namespace std;/*差分约束 :a-b<=x ...... 一系列式子 让求 最小的到最大的的距离对于所有都是...原创 2019-10-08 11:14:35 · 120 阅读 · 1 评论 -
点分治哦 亲~~
例题:(板子)洛谷板子题P3806洛谷第二个板子题p4178说一下点分治、感觉还看的懂。经典问题:找一个树上距离为k的有多少对点。怎么找呢? 分治思想:递归也就是找一个合适的根然后把问题分为跨过这个根的两个点 和 不过这个根的距离也就是在一个子树上的两个点和不在同一个子树上的两个点。处理的时候只处理过这个根的距离(在同一个子树上的)有没有为k的。因为不过这个根的情况在以后会处理到的。...原创 2019-10-23 17:41:41 · 79 阅读 · 0 评论 -
树刨入个门?
树链刨分瞎bb会重儿子:重儿子是每个节点的儿子节点中子树节点数最大的那一个。树链刨分,把一个树砍成好多份变成一个数组p,p数组里存的是点的访问到的顺序,但是点的顺序是根据什么来的?先访问重儿子,因为这样可以尽可能多的一下找好长的链。经典问题:1.给树上两个节点之间的最短边上加上val;2.查询两点的最短距离;用到好多数组,解释一下数组的含义:int p[maxn];//遍历的顺序 时间...原创 2019-10-24 18:58:10 · 99 阅读 · 0 评论 -
线段树 区间合并
区间合并说一道例题:poj3667题意: 两种操作:1 s 查询有没有连续为s的区间有的话输出最左端的那个位置并把那个区间里的值都减了2 a s 左端为a长度为s的房间退房 也就是a~a+s-1这个区间值都加一考虑怎么做。。可以给线段树里放一个lnum,rnum,num分别代表左边连续最大,右边连续最大,总的连续最大,的空房,然后up的时候当前的lnum就等于左边的lnum;当前的rn...原创 2019-10-24 20:14:03 · 152 阅读 · 0 评论 -
扫描线~
突然发现自己好菜~这都不会。。。来记录一下我学的扫描线扫描线可以解决矩形面积的问题,如:给出n个矩阵有重叠部分,问你面积(各种面积)。然后,原理:画的歪歪扭扭好歪好扭黄线就是扫描线了。然后 线段树里一般维护的是矩形所在当前扫描线上的长度。(说的不太清)就是好歪好扭 凑合吧画括号的长度就是所要维护的长度横着的长度不用线段树维护 因为横着的长度就是a[i]-a[i-1] 。然后...原创 2019-11-05 20:44:21 · 292 阅读 · 1 评论 -
有向无环图最小路径覆盖
最小路径覆盖?概念:最小路径覆盖就是找出最小的路径条数,使之成为P的一个路径覆盖.前置知识: 匈牙利算法为什么要用匈牙利算法?首先 每个点都可以代表一个简单路径 答案是n 但是要求最小的 路径覆盖 用匈牙利匹配他的下一个节点 (他的下一个节点只能有一个,因为是有向无环图)。 意思是把这两个简单路径连起来 合为 一条路径,然后答案个数就会-1。这也就是为什么最小路径覆盖=n(节点个数)- 最...原创 2019-11-09 11:40:56 · 209 阅读 · 0 评论 -
曼哈顿距离、切比雪夫距离
读大佬的博客 附上链接,,图也是人家的 对不起 QAQ曼哈顿距离曼哈顿距离:d(i,j)=|X1-X2|+|Y1-Y2|.也就是横纵坐标差的绝对值的和。切比雪夫距离切比雪夫距离:二个点之间的距离定义是其各坐标数值差绝对值的最大值一个是和、一个是最大值 。废话两者可以相互转换,曼哈顿距离的图切尔雪夫的图很像?两者可以相互转换原坐标系中的 曼哈顿距离转切尔雪夫:坐标:...原创 2019-12-03 21:50:02 · 1087 阅读 · 0 评论 -
可持久化并查集
可持久化并查集简单来说就是两颗主席树一颗维护 父亲节点是谁一颗维护 深度为什么要维护深度?降低时间复杂度并查集如果不优化的查询的话是这样:int findx(int x){ return x == fa[x]?x : findx(fa[x]);}void hebing(int x,int y){ int xx = findx(x); int yy = findx(y);...原创 2019-12-23 19:04:14 · 278 阅读 · 0 评论