基础算法
文章平均质量分 54
magnte
这个作者很懒,什么都没留下…
展开
-
离散化模板
离散化:把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率,简单来说,就是将大范围内的有限点集合在一起。举个例子:在1 1000 11 111分别有一个点,离散化之后就是在1 4 2 3分别有一点,从而减小空间复杂度。可以用来处理在很多空间中零散元素之间出现的各种操作,例如求区间和,求比某个点小的元素个数。模板题:假定有一个无限长的数轴,数轴上每个坐标上的数都是 0 。现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c 。接下来,进行 m 次.原创 2021-07-29 15:37:57 · 108 阅读 · 0 评论 -
差分模板
差分:指给定一个数组a,对a的每个元素a[i]都存在b[i] = a[i] - a[i - 1]。例如:b1 = a1;b2 = a2 - a1;b3 = a3 - a2;…bn = an-1 - an;我们可以发现对任何 b1 一直加到 bi 都存在相加的结果等于ai,所以当 b 是 a 的差分数组时,a 也是 b 的前缀和数组。 由于a是 b 的前缀数组,所以想要对 a 某一区间的值进行多次修改的话,可以用O(1)的复杂度修改 b 数组再求 b 数组的前缀和得到 a 数组。例如:对于原创 2021-07-27 20:59:16 · 924 阅读 · 0 评论 -
前缀和模板
前缀和:指的是用一个数组sum[n]表示数组a[n]的前i项和。求法:for(int i = 1; i <= n ; i ++)sum[i] = sum[i - 1] + a[i];计算前缀和时数组下标一定要从1开始,方便计算。用法:前缀和可以用O(1)的复杂度来求某一区间的和,比如求l ~ r区间和可以用sum[r] - sum[l - 1]来计算。模板题:输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l,r 。对于每个询问,输出原序列中.原创 2021-07-27 17:06:11 · 853 阅读 · 0 评论 -
高精度运算模板
#include<bits/stdc++.h>using namespace std;bool cmp(vector<int> &a,vector<int> &b){ if(a.size() != b.size()) return a.size() > b.size(); for(int i = a.size() - 1; i >= 0; i -- ) if(a[i] != b[i])原创 2021-07-26 20:44:37 · 72 阅读 · 0 评论 -
二分模板(二分边界+防止死循环)
二分模板(二分边界+防止死循环)数的范围给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。如果数组中不存在该元素,则返回 -1 -1。输入格式第一行包含整数 n 和 q,表示数组长度和询问个数。第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。接下来 q 行,每行包含一个整数 k,表示一个询问元素。输出格式共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数原创 2021-05-05 12:05:16 · 103 阅读 · 0 评论 -
字符串哈希(模板加最长回文字串)
字符串哈希(模板加最长回文字串)很久很久以前,森林里住着一群兔子。有一天,兔子们想要研究自己的 DNA 序列。我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母)。然后我们每次选择两个区间,询问如果用两个区间里的 DNA 序列分别生产出来两只兔子,这两个兔子是否一模一样。注意两个兔子一模一样只可能是他们的 DNA 序列一模一样。输入格式 第一行输入一个 DNA 字符串 S。第二行一个数字 m,表示 m 次询问。接下来 m 行,每行四个数字原创 2021-05-05 10:56:46 · 308 阅读 · 4 评论