算法
文章平均质量分 54
疯疯癫癫才自由
这个作者很懒,什么都没留下…
展开
-
树状数组(单点更新,区间查询;区间更新,单点查询;二维数组的树状数组实现)
将x转换为二进制,则lowbit(x)就是右边第一个'1'号位表示的位权。将x转换为二进制,则lowbit(x)就是右边第一个'1'号位表示的位权。将x转换为二进制,则lowbit(x)就是右边第一个'1'号位表示的位权。返回二维矩阵a[1][1]到a[i][j](一个子矩阵)的和。///c[x]存储a[x](含x号位)前Lowbit(x)个数。lowbit 可以理解为能整除x的最大的2的幂次。lowbit 可以理解为能整除x的最大的2的幂次。lowbit 可以理解为能整除x的最大的2的幂次。原创 2022-11-01 15:10:38 · 96 阅读 · 0 评论 -
求图的割点,割边(啊哈算法)
【代码】求图的割点,割边(啊哈算法) 时间戳:深度优先遍历时,访问每个节点的先后顺序从 1到n; 使用 num[] 来记录每个顶点的先后顺序; 满足割点的条件:子节点 v 不经过父节点 u 是不能达到u的祖宗节点的(也就是已经被访问 的那些节点); 使用 low[] 来记录每个节点不经过父节点能到达的最早顶点的时间戳; 因此满足割点的结点是: low[v] >= num[u] ;意思是子节点v不经过父节点u能到达的最早时间 戳也不过是u,那么把u去掉原创 2022-10-01 18:31:33 · 310 阅读 · 0 评论 -
two point(双指针)
的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…第一行包含三个整数 n,m,x,分别表示 A 的长度,B 的长度以及目标值 x。的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。而得的序列,例如序列 {a1,a3,a5}是序列 {a1,a2,a3,a4,a5}第二行包含 n个整数,表示数组 A。第三行包含 m个整数,表示数组 B。个整数,表示 a1,a2,…个整数,表示 b1,b2,…......原创 2022-08-07 08:59:31 · 133 阅读 · 0 评论 -
离散化求前缀和
次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [l,r]假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。次操作,每次操作将某一位置 x 上的数加 c。行,每行输出一个询问中所求的区间内数字和。行,每行包含两个整数 x 和 c。行,每行包含两个整数 l 和 r。现在,我们首先进行 n。第一行包含两个整数 n。...原创 2022-08-04 11:26:59 · 115 阅读 · 0 评论 -
差分(前缀和的逆运算)
行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2)个操作,每个操作包含三个整数 l,r,c,表示将序列中 [l,r] 之间的每个数加上 c。* 数组a是原数组,d是差分数组,所谓差分数组就是a是d的前缀和,即差分与前缀和。行,每行包含 5 个整数 x1,y1,x2,y2,c。每个操作都要将选中的子矩阵中的每个元素的值加上 c。个整数,表示所有操作进行完毕后的最终矩阵。行,每行包含三个整数 l,r,c。个整数,表示整数矩阵。..原创 2022-08-02 17:59:11 · 385 阅读 · 0 评论 -
前缀和(区间和,子矩阵的和)
795. 前缀和输入一个长度为 n的整数序列。接下来再输入 m个询问,每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l个数到第 r个数的和。输入格式第一行包含两个整数 n和 m。第二行包含 n个整数,表示整数数列。接下来 m行,每行包含两个整数 l 和 r,表示一个询问的区间范围。输出格式共 m行,每行输出一个询问的结果。数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样例:输出样例:s[i]=s[i-1]+a[i] //s[i]表示原创 2022-08-02 17:17:19 · 108 阅读 · 0 评论 -
全排列(深度优先,排列树)
代码】全排列(深度优先,排列树)原创 2022-07-16 22:48:25 · 303 阅读 · 0 评论 -
(在线处理)01-复杂度2 Maximum Subsequence Sum
01-复杂度2 Maximum Subsequence Sum分数 25作者 陈越单位 浙江大学Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, Ni+1, ..., Nj } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the lar原创 2022-07-10 11:04:53 · 256 阅读 · 0 评论 -
DFS,BFS以及图的遍历搜索
DFS,BFS以及图的遍历搜索原创 2022-07-05 16:38:13 · 86 阅读 · 0 评论 -
与利润有关的背包问题(贪心算法,深度优先搜索)
/**< 1th exmaple: *//** \brief * 一个商人带着一个能装m千克的背包去乡下收购货物, * \ 现有n种货源,且第i种货物有wi千克,可获利pi元, * \ 如何收购商品,才能使利润最大,注意此时物品可以拆零。 * \return * data: 5 10 4 5 2 6 3 4 8 15 5 18 *//**< 贪婪算法解决,收获:对于一个数组内的值,如果要从小到大或原创 2022-07-04 15:44:24 · 313 阅读 · 0 评论 -
最长回文子串(动态规划)
最长回文子串: 状态设计:dp[i][j]表示str[i]到str[j]的字串是否为回文子串,是表示为1,不是表示为0; 状态转移方程:dp[i][j]=dp[i-1][j-1](str[i]==str[j]) = 0 (str[i]!=str[j]); 但此处又须注意,dp的值是以字符串的子串长度(1...len)进行递增枚举的, 而不是以字符下标i为基点,j=i+k(k=1...len),因为在算后面的dp[i][j]时,需要把dp[原创 2022-07-03 16:58:55 · 446 阅读 · 0 评论 -
最长公共子序列(LCS)(动态规划,递归)
1)从前往后递推:2)从后往前推; 状态设计:dp[i][j]表示两个序列从尾位置开始,第一个序列到i位置, 第二个到j位置的最长公共子序列; 状态转移方程:dp[i][j]=dp[i+1][j+1]+1 (str1[i]==str2[j]); || = max(dp[i+1][j],dp[i][j+1]) (str1[i]!=str2[j]); 最后可根据dp[i][j]的值输出最长公共子序列的内容,当dp[i][j]== (dp[i+1原创 2022-07-03 15:51:15 · 1052 阅读 · 0 评论 -
最长不下降子序列(LIS)(动态规划)
3)为了后续不下降子序列的内容进行输出,也可开一个result数组,result[i] 表示str[i]的前继结点,一个序列的首结点设置为-1,与其他节点进行区分, 其实和第一个程序利用dp的值进行输出内容是一样的。...原创 2022-07-03 14:53:10 · 601 阅读 · 0 评论 -
最大连续子段和(动态规划,递归,递推)
状态设计:dp[i]表示以a[i]结尾的最大序列和 状态转移方程: dp[i]=max(a[i],dp[i-1]+a[i]);求序列的最大连续子段和,如果全为负数,则最大连续最大字段和为0 并且还要输出最大子段和的开始和结束下标二分法求解,具有重叠子问题,用递归则要中间进行一些处理操作。...原创 2022-07-02 23:57:32 · 914 阅读 · 0 评论 -
动态规划——相关概念,(数塔问题)
与动态规划有关的几个概念:给出一个经典问题——数塔问题:一共给出了几个程序,有直解输出结果的,还有给出最大值的路径的,也有递归求解的,还有递推求解的: 递归解决: 输出最大值的路径:三维数组存储数据,存储,中间处理,输出于一体...原创 2022-07-02 12:09:38 · 133 阅读 · 0 评论 -
KMP算法,(字符串匹配问题)
实现字符串的匹配问题: mat[i]是使子串str[0...i]的前缀str[0...k]等于后缀str[i-k...i] (i!=k)的最大的k; 前缀和后缀可以部分重叠,但不能是str[0...i]本身;因此得出求解mat数组的函数:完整代码:...原创 2022-06-29 18:09:17 · 117 阅读 · 0 评论 -
算法设计与编程挑战赛,1.7.4 序列合并(贪心算法)
问题:有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个。 第一行一个正整数N; 第二行N个整数Ai, 满足Ai≤Ai+1 Ai≤10^9; 第三行N个整数Bi,满足Bi≤Bi+1,Bi≤10^9. 分析: 可用贪心算法,对于a[1],b中可能有n数据组成最小的N个数,但对于a[2],b中顶多有n/2个数据, 因为a[1]...原创 2022-06-28 23:44:29 · 259 阅读 · 0 评论 -
快速排序,查询序列的第K大的数
主元:主元左边的元素不大于它,右边的元素都大于它 下面给一个例题:原创 2022-06-28 19:33:37 · 135 阅读 · 0 评论 -
数据离散化
离散化,将原始数据的序号pos保存下来,再将值进行排序,然后开一个新的数组来记录原始序列 的大小编号,将原始序列的pos值作为结果数组的下标,将排好序的数组的下标作为结果数组的值。这就能实现原始序列的排序。......原创 2022-06-27 21:56:21 · 330 阅读 · 0 评论 -
PAT A1057 Stack
PAT甲级 A10571057 Stack (30分)Stack is one of the most fundamental data structures, which is based on the principle of Last In First Out (LIFO). The basic operations include Push (inserting an element onto the top position) and Pop (deleting the top element)原创 2022-06-27 21:45:53 · 120 阅读 · 0 评论 -
逆序对对数计算,顺序对对数计算——归并排序
/如果第二个序列的这个数(没比较的第一个数, //因为序列是已经有序了,这个数必定是第二段序列还没比较的数中最小的数,) //比第一个序列的还没比较的任何数小,则第一段序列的还没比较的数都能和 //第二段序列的这个数构成逆序对 完整代码: 既然逆序对都算出来了,那么顺序对可谓是换汤不换药,顺序对定义:dp[i] < dp[j] (i......原创 2022-06-28 13:14:21 · 512 阅读 · 0 评论 -
归并排序
2——路归并排序,将序列两两分组进行排序,共有n/2组;然后再将这些组两两进行合并排序,得到n/4组,以此类推,直到只剩下一个组为止,此时这个组便是有序的。两两分组的时候,可以用基于二分的思想进行分组。归并排序void my_merge(int *a,int l1,int r1,int l2,int r2)//两个有序序列,合并为一个有序序列,tow point :将两个有序序列合并为一个有序序列,O(n)...原创 2022-06-28 12:54:32 · 72 阅读 · 0 评论 -
蓝桥杯2022初赛——扫雷
蓝桥杯,排序,手写hash,map,unordered_map原创 2022-06-27 11:10:45 · 3126 阅读 · 8 评论 -
字符串hash进阶,将字符串转化为数字存到数组中
此下皆为看算法笔记所写:问题一:1)给定若干个个字符串,求有多少个不同的字符串/*1)给定若干个个字符串,求有多少个不同的字符串*/#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;typedef long long LL;LL hashfunc(string str);const int P=1原创 2022-05-15 23:59:27 · 1212 阅读 · 0 评论 -
二分法算法
/给出n根木棒,长度已知,把他们切割成k段长度是整数且相等的木棒,求最长长度。区间不相交问题,给出N个开区间(x,y),从中选择极尽可能多的开区间,//要往里面装入高度为h的水,要求测面看过去的面积s1与半圆面积s2。//装水问题,侧面看上去是一个半圆的储水装置,半圆的半径是R。//当然,从左到右开始选择也可以,也是选择区间问题。7)返回最后一个一个小于等于x的下标;计算函数零点,当然,只能返回一个值。6)返回第一个大于等于x的下标;使得这些开区间两两没有交集。//的比例恰好为r,求h。...原创 2022-05-03 23:39:17 · 308 阅读 · 0 评论