随笔分类 - acw基础
摘要:merge_sort(l, r)返回区间[l, r]内逆序对的个数,而区间[l, r]内的逆序对个数是左半边的逆序对个数merge_sort(l, mid)和右半边逆序对个数merge_sort(mid + 1, r)之和外加左右两边构成的逆序对个数。 #include <iostream> usi
阅读全文
摘要:归并排序板子 归并排序也用的分治思想,思路是将理想情况(\(n=2^k\))下长度为n的序列不断地分成两份,直到分成n个长度为1序列,然后自底向上地合并两个有序序列。 #include <iostream> using namespace std; const int N = 100010; int
阅读全文
摘要:快选板子 实际上是在快排板子上改了改 #include <iostream> using namespace std; const int N = 100010; int n, k; int q[N]; int quick_sort(int l, int r, int k){ if(l == r)
阅读全文
摘要:快排板子 从小到大排序 以j分界 #include <iostream> using namespace std; const int N = 100010; int n; int q[N]; void quick_sort(int l, int r){ if(l >= r) return; int
阅读全文
摘要:唉,好久没写题了,全面退化... 翰翰和达达饲养了 N 只小猫,这天,小猫们要去爬山。 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。 翰翰和达达只好花钱让它们坐索道下山。 索道上的缆车最大承重量为 W,而 N 只小猫的重量分别是 \(C_1,C_2...C
阅读全文
摘要:区间合并模板题 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。 我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。 由于马路上有一些区域要用来建地铁。 这些区域用它们在数轴上的起始点和终止点表示。
阅读全文
摘要:给定 n 个区间 \(l_i,r_i\),要求合并所有有交集的区间。 注意如果在端点处相交,也算有交集。 输出合并完成后的区间个数。 例如:[1,3]和[2,6]可以合并为一个区间[1,6]。 输入格式 第一行包含整数n。 接下来n行,每行包含两个整数 l 和 r。 输出格式 共一行,包含一个整数,
阅读全文
摘要:二段性:对于一个长度x,当长度x能够满足条件时,所有满足长度$\le x$的长度t,都能够满足条件,所以能够二分出长度的最大值。 实数二分,因为是实数,所以二分的终止条件不能用l < r来判断,而是应该根据题目要求的精度p令终止条件为r - l > 1e-(p + 2)。 复杂度:\(O(nlog(
阅读全文
摘要:计$(a, b)\(为a和b的所有公约数,那么有\)(a, b) = (b, a % b)$ 证明: 计$(a, b) = A, (b, a - kb) = B,(a%b = a - kb,k=[a/b])$ \(1)\) $\because\forall x \in A,$有$x | a$且$x|
阅读全文
摘要:给一个数n,求它的约数个数 因为n可以唯一分解成质因数的乘积即$n = p_1^{\alpha1}p_2^{\alpha2}...p_t^{\alpha t}$,所以n的约数c的形式应该是$c= p_1^{\beta1}p_2^{\beta2}...p_t^{\beta t}\(,对于任何两组不同的
阅读全文
摘要:筛选出从2~n的所有素数 埃氏筛 对2~n中的每个数k,筛去k在2~n中的每一个倍数,最后剩下的就是2~n的所有素数,因为相当于每一个数k都会被2~k - 1的所有数筛一遍,一旦k存在2~k - 1的约数,那么他必定会被筛掉,反之k一定不会被筛掉。 **注意:**k是素数 ⇔ k不存在2~k - 1
阅读全文
摘要:给一个数n,对他进行质因数分解 代码 for(int i = 2; i <= n; i ++) if(n % i == 0){ cout << i << endl; while(n % i == 0) n /= i; } 证明以上循环可以输出n的所有质因数 当n为质数时,只输出n,得证。 当n不是质
阅读全文
摘要:给一个数n, 求[1, n]内的所有约数 由于当$i | n$,必有$(n / i) | n$,并且这两个约数关于$\sqrt n$对称,所以要枚举出所有的约数,只需要枚举到$1,...,[\sqrt n]$的约数即可,并且对于任意的$i \in {1,... [\sqrt n]}$都有$i < n
阅读全文
摘要:乘法逆元 需要乘法逆元的原因:对于两个超大的正整数a, b, long long无法存储,保证b | a, 现在要计算(a / b) mod m,其中m为素数。考虑以下计算方法: 认为$a / b = (a %m) / (b % m) %m$,这个显然不对。 所以为了能够方便的算出(a / b) m
阅读全文
摘要:找长度为k的窗口中的最大值(单调减队列),最小值(单调增队列) #include<iostream> using namespace std; const int N = 1000010; int n, k; int a[N]; int q[N], hh = -1, tt = 0; int main
阅读全文
摘要:输入一串数字,给你 M 个询问,每次询问就给你两个数字 X,Y,要求你说出 X 到 Y 这段区间内的最大数。 输入格式 第一行两个整数 N,M 表示数字的个数和要询问的次数; 接下来一行为 N 个数; 接下来 M 行,每行都有两个整数 X,Y。 输出格式 输出共 M 行,每行输出一个数。 数据范围
阅读全文
摘要:星星的坐标按照$y$坐标升序给出,当$y$坐标相同时,按照$x$坐标升序给出,那么可以得到给出的顺序时是按照$y$坐标分层,从左向右给出的,即先给出$y = 1$一层,再给出$y = 2$一层的所有星星... 那么有结论:在给出某一个星星的坐标$(x_i, y_i)$时,它的$y$坐标一定是最大的,
阅读全文
摘要:使用线段树维护一段长度为$n$的区间,线段树的空间要开$4n$的原因 设要维护的区间为$[1, n]$长度为$n$ 若$n = 2^k, k = 0, 1, 2, 3, ...$ 那么构造的线段树的结点个数不多不少刚好用$2^{k + 1} - 1 < 2n$个, 所以开$2n$足够,此时的线段树为
阅读全文
摘要:$f(i, j)$表示在我摆放第i列的时候,i - 1列1*2方格伸出来的情况为j的所有摆法的集合,存储摆法数量 有$f(i, j) = D$, D是所有满足以下两个条件的其他状态的集合中存储数量的和 从i - 2列伸出来的方格情况k和i - 1列伸出来的方格的情况之间没有冲突(k & j == 0
阅读全文
摘要:\(a*x \equiv b \ (mod \ m)\) 即存在$y$ 使得$a*x = m * y + b$ 即$ax -my=b$ 令$y'= -y$ 有$ax + my'=b$ $ax \equiv b \ (mod \ m)$有解等价于$ax + m*y'=b$有解 联想扩展欧几里得算法,若
阅读全文