随笔分类 - 数据结构
摘要:点分治 淀粉质 考虑一个问题:给定一棵树,统计树的路径中长度小于等于 \(k\) 的路径条数 显然,我们需要选定一个点为根,将其转化为有根树进行处理,设为 \(x\) 对于节点 \(x\) 来说,它子树中的简单路径包括两种情况: 经过节点 \(x\) ,由两条或一条路径拼接而成 不经过节点 \(x\
阅读全文
摘要:树状数组 lowbit : 求最低位的 $1$ 以及后面的 $0$ 所组成的十进制数 #include<iostream> #include<cstdio> #include<cstring> #include<math.h> #include<algorithm> #define ll long
阅读全文
摘要:康托展开 利用康托展开,可以求得全排列的序列号 康托展开有公式: \(ans=\sum_{i=1}^{n}{k \times (i-1)!} + 1\) 其中的 \(k\) 即为该点构成的逆序对的数量 code #include<iostream> #include<cstdio> #include
阅读全文
摘要:并查集 并查集朴素实现: inline ll find(ll x) { if(fa[x]==x) return x; return find(fa[x]); } 路径压缩 inline ll find(ll x) { if(fa[x]==x) return x; return fa[x]=find(
阅读全文
摘要:传送门 分析 本题的两个平台能否接住水滴仅与水滴的横坐标有关,所以纵坐标可以直接扔掉不管 小贪心:对于每一个水珠,显然,两个平台必须不能重合( 除非两个平台的总长度大于 \(n\) ),而且,平台若想要最大化接住的水滴数,显然平台的一个端点必然要接到至少一个水珠 那么,本题的解法就显然易见了:我们可
阅读全文
摘要:#洛谷P2574 new为C++中提供的一种“动态内存分配”机制,使得程序可以在运行期间,根据实际需求,要求操作系统临时分配一片内存空间用于存放数据; 通过new运算符来实现; 但是new的时间复杂度并不小,所以需要找一个方法来优化(或替代)new,来加快程序运行的速度 (顺便A道黄题) 1 #in
阅读全文
摘要:洛谷P3372 线段树支持区间修改和区间查询,以v变量表示当前一段区间的总值,tag为懒标记,记录修改操作,在查询子节点时,由父节点下传,记录修改值的大小,并在子节点加入懒标记 l和r分别表示当前节点所包含的最左区间端点和最右区间端点,ls和rs分别代表当前节点的左子树和右子树 1 #include
阅读全文

浙公网安备 33010602011771号