02 2024 档案
哈希
摘要:哈希 树哈希,就是对于树的哈希 #include<bits/stdc++.h> using namespace std; #define ull unsigned long long int m,n; vector<int> son[60]; ull shift(ull x){ x^=x<<13;
单调栈
摘要:单调栈 定义 一种栈,其中的元素满足单调性 解决NGE问题 NGE问题(Next Greater Element) #include<bits/stdc++.h> using namespace std; const int N=3e6+10; int n; int a[N],stk[N],f[N]
基数排序
摘要:基数排序和计数排序 跟比较排序比起来,感觉复杂度开挂了 计数排序非常依赖于数值范围,是开了一个值域的桶,然后对着桶输出所有元素,在值域小的情况下非常的快 计数排序还有一种权值线段树优化,可以解决大值域问题 ,但是没有什么用删掉 基数排序可以看作计数排
随机化技巧
摘要:随机化 这是一个脱离了理论,但是及其实用的领域。 随机数的生成 1.1 mt19937 mt19937 可以生成 32 位整数,基于梅森旋转算法,实用性较强。笔者习惯于使用时间的随机种子。 mt19937 engine(chrono::system_clock::now().time_since_e
卡常科技
摘要:卡常科技 针对于毒瘤出题人 IO optimize cin/cout 很慢,但是 ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cout<<endl;//Wrong cout<<'\n';//Right scanf/printf 比较快,但对于毒瘤
根号分治与莫队算法
摘要:1.根号分治与分块 在预处理与询问的复杂度之间寻找平衡的一个算法,通常以根号为分界线。属于智慧的暴力。 1.1. 根号平衡 使用数学不等式对于阈值取一个值,使得复杂度最优。如果有阈值 ,若问题有一部分暴力可以 解决,另一部分可以 解决
树套树
摘要:树套树 树状数组,(动态开点线段树),平衡树 二逼平衡树 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询 在区间内的排名 查询区间内排名为 的值 修改某一位值上的数值 查询 在区间内的前驱(前驱定义为小于 ,且最大的数) 查询 \(k
ABC342总结
摘要:ABC342总结 A+B+C+D 虽然有奖,但是一无所获,都排到2000名左右了。 赛时快速通过前四题,但是第五题被题目迷惑,第六题思路混乱,第七题本来是能力范围之内(数据结构是chn oier的特长),但是没读题。 E 一个最短路,这是有提示的,但是有一个迷惑信息。题目让我们求从 A 最晚出发的时
ABC341总结
摘要:ABC341总结 Score:1825 Rank:737 F 其实按照题意,原图可能有环,但是因为转移有权值限定,转换一下就是DAG,进行拓扑排序。 G AK所差最后一题,使用数形结合思想,x轴为数组下标,y轴为值域。 题意是给出左端点,右端点任意,求区间平均值最大 进行前缀和处理,然后会惊奇的发现
笛卡尔树
摘要:笛卡尔树 定义 以一个数列为基础,存储数列中元素,满足两个限制的树。一是数列中元素的下标满足二叉搜索树的性质,二是元素的大小满足堆的性质。 建树 使用单调栈,在线建树。考虑从左往右在已有的笛卡尔树中添加元素,因为新元素的下标最大,所以只可能取代最右链中的某个元素,并将其收为左儿子。又由于堆的性质,所
RMQ
摘要:区间最大最小值(RMQ) st 表 利用 min,max区间合并是可重的,倍增预处理 时间复杂度 空间复杂度 线段树 二进制划分区间 时间复杂度 method of four russians 建立笛
小清新线段树
摘要:小清新线段树 定义 结合时间复杂度分析(势能分析)以及懒标记应用的非传统线段树 可以理解为带剪枝的线段树 复杂度证明 以 The Child and Sequence 为例,先看操作 1,2,对于一个数 进行取模,要么这个数保持不变。若模数 ,则剩余部分
网络流
摘要:网络流最大流 有向图 中,有两个特殊的点,源点和汇点,每条边有指定的容量,求 到 的最大流。 就像从源点放水,水量无穷大,汇点的水量是多少? 定义 为容量, 为流量 流量守恒 容量性质 \(\sum
01trie
摘要:01trie 定义 01-trie是字符集为0,1的trie,可以维护异或极值,维护异或和 实现 主体仍然是 trie ,维持 数组记录儿子不变。需要因为异或的性质,所以只需要维护加入 0/1 边的奇偶性即可,所以添加 数组记录父节点到该节点的边数。此外因为要统计异或和,所以
矩阵快速幂
摘要:矩阵快速幂 定义 使用矩阵乘法加速递推 注意点 可以预处理 次乘方的转移数组,到询问时,只需要乘 次即可 要注意矩阵的赋值不要覆盖赋值,有的时候慎用 = 要用 += 要注意矩阵中的符号,会使取模操作出问题 要注意加速递推时 f[i]=f[i-1] 处于i位的数应
线段树进阶
摘要:线段树进阶 动态开点 定义 动态存储数据的线段树,可以优化空间复杂度 实现 为了避免 ,不再使用完全二叉树存储,而记录左右儿子 此外需要 记录已经开了多少点 在递归时要记录点的左右区间,确保开点时能知道区间大小 void modify(int &
VP-CF1879 总结
摘要:VP-CF1879 总结 Url:https://codeforces.com/contest/1879 Score:A+B+C+D D 做出来了,使用了一个复杂的方法。拆位肯定没错,但是有异或前缀和的方法,可以大大简化码量。 E 做出来了,贪心搞出来性质,即按深度染色。但是没读题,没看到 \(k\
重链剖分
摘要:重链剖分 优先走重儿子,路径跳不超过 int siz[N],fa[N],dep[N],top[N],dfn[N],hson[N],dfc;//注意每个都要处理 void dfs1(int x,int Fa){ fa[x]=Fa; siz[x]=1; hson[x]=0;
CF1929
摘要:CF1929 总结 Url:https://codeforces.com/contest/1929 Rating:https://codeforces.com/bestRatingChanges/12561378 C 误解了题意,以为赌场会配合他前面x次都输然后赢最后一场。原来赌场不会配合Sasha
虚树
摘要:虚树 (Compressed Tree) 定义 树上有一些关键点,有很多无用点,所以就关键点建树称为虚树。 建立虚树 不能只有关键点,一般还要有他们的lca,才能统计信息。信息的需求和统计方法多种多样,要求max,min,cnt等等。可以树链剖分+线段树或倍增法维护虚边。 可证虚树节点不超过 \(2
OI 方法论
摘要:OI 方法论 分析问题性质 问题建模 加速求解 c++语言实现 分析问题性质 二选一:2-sat 区间问题:树状数组,线段树(优化建图),前缀和,差分 最大的最小值,最小的最大值:二分答案 多个状态的值:可持久化数据结构 往往找出问题性质,是解题的突破口 性质的工具——美妙的数学 注意不等式两边同乘
Sparse Table Advanced Skills
摘要:Store a tuple of (value of maximum, index of maximum, value of the second maximum). To merge two segments, we compare if the indices of the maximums a
最大流
摘要:最大流问题 有向图 G 中,有两个特殊的点,源点和汇点,每条边有指定的容量,求S到T的最大流。 就像从源点放水,水量无穷大,汇点的水量是多少? 定义 c为容量,f为流量 流量守恒 容量性质 斜对称
CDQ分治
摘要:CDQ分治 引入 偏序问题 对于每个有序对 求有多少个有序对 暴力 按 排序,问题为求顺序对,cdq分治 定义 解决特定种类问题的算法,统计左区间对右区间的贡献,一个点所
点分治
摘要:点分治 定义 树上的分治 先求一个点的答案,然后求子树 树上距离小于等于k的点对数量 枚举一个点 p 求解经过p的点对贡献,然后递归解决子树 为了降低分治复杂度,要求重心,求重心要限定子树范围内,添加 vis 防止上访,求dis也要 ans要减去在同一个子树 重心的子树小于 ,所以调用
树上启发式合并
摘要:启发式合并 定义 在并查集和树上处理离线问题的算法,主要思想是把小集合并到大集合上 做法 树上颜色:一棵树,每个节点都有一个颜色,给定 m 次询问,问以 x 为根的子树有多少种不同的颜色。 轻重剖分,只需要记录重儿子即可。先遍历轻儿子,不计修改。再遍历重儿子,计入修改。最后再遍历轻儿子(dfs序列简
主席树
摘要:主席树 定义 可持久化的线段树 实现 void mkrt(int &p,int q){ int tmp = mknode(); t[tmp] = t[q]; p = tmp; } void pushup(int p){ t[p].dat = t[t[p].ls].dat+t[t[p].rs].dat
线性基
摘要:线性基 定义 一个正整数序列,让线性基可以用异或和表示其中任意一个数,并且线性基的个数最少 性质 序列中的任何一个数都可以由线性基中的数异或得到 任何数的异或和不为零 保持性质一的前提下,线性基的数量唯一且最少 线性基的构造 不能插入线性基,即x经过若干次异或变成0,根据性质三不需加入 可以被插入,