自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 ACM模板

退役后~ACM代码模板(主要是侧重与数据结构的归纳与总结)

2023-06-23 17:32:03 1553

原创 求序列中逆序数的四大算法(倾心之作)(2024年851真题就是考了归并排序求逆序数(>—<))

通过归并排序、树状数组、线段树、trie数的基本原理,来快速求解一个序列中的逆序数。

2023-05-15 00:52:19 9590 4

原创 数据库ER图

数据库

2022-11-11 18:10:49 364

原创 欧几里得与扩展欧几里得算法

欧几里得算法与扩展欧几里得算法

2022-04-26 20:13:32 635 1

原创 有关前缀和知识的总结

前缀和顾名思义就是求一个序列的前缀之和,它能够在O(1)的时间复杂度内求得区间的值。前缀和的最基本用法:典型例题E. Yonagi and YOASOBI#include<bits/stdc++.h>using namespace std;const long long N=1e6+7;struct node{ long long a; long long ah; long long ahh;}b[N];char c[N];int main(){ cin&gt

2022-04-24 17:04:26 470

原创 差分数组(简单易懂)

一、什么是差分数组?差分数组本质上来说就是一个数组,可以用O(1)的时间处理区间修改。二、差分数组的定义式设原数组为a数组,差分数组为d数组,则对于i∈[2,n],都有d[i]=a[i]-a[i-1].三、差分数组的性质1.当我们需要更新区间[l,r]时候(仅指加减运算),我们仅仅可以只更新d[l]+=x,d[r+1]-=x;2.当我们需要单独查询原数组一个点的值的时候,我们不难发现出令Sn为di的前缀和,那么a[i]=Si;3.当我们需要求原数组的前缀和的时候,我们可以设前x项

2022-04-24 00:21:46 10031 8

原创 线段树模板(史上最简单易懂的数据结构)

什么是线段树?线段树言下之意就是将线段分解为一颗树,并且这颗树是一颗二叉树,树上的每一个节点都具有某些性质。线段树有什么用?线段树主要能够在O(logn)的时间复杂度上解决区间上的问题。题目引入:AcWing243.一个简单的整数问题2本题目就是很简单的线段树的板子题,可以用来当做模板来使用。线段树的几个重要操作:1.tree[]数组的建立:struct node{ int l;//表示左端点 int r;//表示右端点 int v;//表示区间内的...

2022-04-19 20:29:41 3376 1

原创 最近公共祖先(LCA)之倍增法

什么是最近公共祖先?LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先--------百度百科例如:对于点9和点5,它们的最近公共祖先是点2;对于点4和点2,它们的最近公共祖先是点2。这里答案是显而易见,但是如果我们需要用暴力来计算的话,对于n个点,m次询问,时间复杂度为O(nm),显然,当n和m过大的时候就TLE了,所以,我们需要一种更好的算法来降低时间复杂度,接下来的倍增法就是其中一种方法。首先定..

2022-04-15 21:37:06 805 1

原创 RMQ算法思想的总结与归纳

RMQ算法

2022-03-30 16:59:49 434

原创 Codeforces Round #768 (Div. 2) A~C题解

Problem A:本题大意为存在两个长度相等的数组a、b,任意选择索引i,交换数组ai,bi的值,使得a数组的最大值乘以b数组的最大值最小。本题不难想到我们可以遍历数组,依次将比较大的放到a数组内,否则放到b数组内。AC代码:#include<bits/stdc++.h>using namespace std;int a[1000001];int b[1000001];int main(){ int t; cin>>t; while

2022-01-28 14:36:28 1265 1

原创 Educational Codeforces Round 121 [Rated for Div. 2]A~C题解

A题:本题目大意为输出一个字符串,其字符串的每一个相同字符的距离为定值,输出任意一种情况即可。做题的时候可以直接统计字符串的个数,并统一一起输出。题目较简单,具体代码如下:...

2022-01-17 14:20:15 538

原创 筛素数(常见易懂版)

所谓的素数(质数),就是该数只能被1和他本身整除的数。所以,我们可以这么写:#include<bits/stdc++.h>using namespace std;

2021-12-24 20:57:46 678

原创 康拓展开即逆康拓展开(简单易懂版)

康拓展开当我们去搜康托展开这个关键字的时候,映入眼帘的是下面的一大堆公式:其中X为康拓展开值为整数,且且表示袁数在当前未出现的元素是排第几个。很不错,这样一下子会把人弄得搞陀不清(湖南方言)。所以,当我们学习一个算法的时候,首当其冲的应该是要知道此算法到底是做什么用的?百度百科是这样解释的:康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。这是什么意思呢?简单的来说就是将一个

2021-12-22 15:04:51 1629 2

原创 树状数组(树状数组的基本用法与操作)

什么是树状数组?树状数组简单的来说就是将一个数组模拟树形结构。树状数组有什么用?树状数组可以将求和的从O(n)操作简化为O(logn)。如图所示,横线下方为a数组表示为初试数据;上方为数组c,利用树形结构存储a数组内的数据。我们列举出来的这些:c[1]=a[1]c[2]=a[1]+a[2]c[3]=a[3]c[4]=a[1]+a[2]+a[3]+a[4]c[5]=a[5]c[6]=a[5]+a[6]c[7]=a[7]c[8]=a[1]+a[2]+a[3]+a[4]

2021-11-14 21:36:26 2265 2

原创 快速排序交换法------2

嗯...本人在【模板】快速排序 - 洛谷题上看到大佬的题解。觉得我之前写的好像很复杂。代码:#include<iostream>using namespace std;int n,a[1000001];void qsort(int l,int r)//应用二分思想{ int mid=a[(l+r)/2];//中间数 int i=l,j=r; do{ while(a[i]<mid) i++;//查找左半部分比中间数大的数

2021-10-30 17:25:54 171

原创 快速排序挖坑法

快速排序是一种高效的排序算法,不管是考研还是公司面试,快速排序算法都是我们必不可少的知识点。本解析为快速排序的挖坑法(快排还有交换法)。快速排序的挖坑法是快速排序的原理的实现。具体的步骤:设定一个基准值(一般为序列的最左边元素,也可以是最右变的元素)此时最左边的是一个坑。 开辟两个指针,分别指向序列的头结点和尾结点(选取的基准值在左边,则先从右边出发。反之,选取的基准值在右边,则先从左边出发)。 从右指针出发依次遍历序列,如果找到一个值比所选的基准值要小,则将此指针所指的值放在坑里,左指

2021-10-30 15:50:40 1296 3

原创 快速排序交换法------1

快速排序简称“快排”。在C++STL模板库内有快排的函数sort();这就阻挡住我们更深入理解快排。快排不管是各个公司的面试,还是考研,都是必考的知识点。快排其实很简单,接下来我们了解一下快排:快速排序(Quicksort)是对冒泡排序算法的一种改进。快速排序算法通过多次比较和交换来实现排序,具体步骤如下:注明:本解析的主要方法为交换法。还有一种方法为挖坑法。开辟两个指针,分别指向序列的头节点i,序列的尾节点j。 设定一个分界值(一般为该序列的第一个元素),通过该分界值将数组分成左右两部分。

2021-10-26 16:07:10 860

原创 插入排序及希尔排序

插入排序:插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。基本思想:插入排序就好比如有一副杂乱的扑克牌,当你抓牌的时候,就是要将相同的摆在一起,并将牌从小到大(从大到小)的顺序排列。核心操作:扑...

2021-10-23 16:11:25 411 1

原创 归并排序及求逆序对数

什么是归并排序?归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。...

2021-10-22 12:00:46 1529 1

原创 并查集模板

#include <bits/stdc++.h>using namespace std;int sum=0;int pre[1000001];int vis[1000001];/*int find(int x){//压缩寻找路径 ;寻找时为了避免成为单叉数,变n叉数,以节约时间 if(pre[x]==x)return x; return pre[x]=find(pre[x]);//找的时候就把该点的根节点给找到并替换 } */int find(int x){//暴力寻找根节.

2021-07-22 10:42:54 129

原创 最短路问题的总结与反思

最短路问题的总结与反思前言什么是最短路问题?每当我们使用BD(还有GD和TX)地图的时候,每当我们输入我们的目的地,软件会自动给我们分配路径,而这些路径包括这到达所需要的时间和所需要的路程,这个就是最短路问题。我们给定一个定义:给定一个有向图G=(V,E),,,节点以[1,n]之间的连续整数编号,(x,y,z)描述一条从x出发,到达y,长度为z的有向边。最短路问题所需要什么算法思想?对于最短路问题,我们有三种算法来计算最短路。1.Floyd算法2.Dijkstra(迪杰斯特拉)算法3.B

2021-07-22 10:32:26 895

ACM模板(数据结构)

本模板可能存在一些局限性,比如一些比较偏的ACM知识点可能没有怎么涉及到。 作为我们队伍的数据结构手,可能仅在对数据结构会有更多的阐述,即对于区域赛除数据结构题外的银牌题可能会有所不足。 最后我要对广大ACMer说的是:“不要在意别人的看法和想法,坚定自己的信念,坚持就是胜利!。”

2023-05-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除