自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2021-05-01

线段树O(logN)的时间复杂度内实现单点修改,区间修改,区间查询(区间求和,区间最值)等。线段树维护的信息满足可加性。建树void build(int k,int x,int y){ l[k]=x; r[k]=y; if(l[k]==r[k]){ d[k]=a[l[k]]; return; } int mid=(l[k]+r[k])>>1; build(k<<1,x,mid); build(k<<1|1,mid+1,y); d[k]=d[k&l

2021-08-04 09:29:40 135

原创 数据结构基础(三)习题未处理

一、链表:和数组都可以用于存储数据,其中链表通过指针来连接元素,而数组则是把所有元素按照次序存储。数组和链表有不同的优势:链表:可以方便地删除插入数据,操作次数为O(1),但寻找读取据的效率低,在随机访问数据中的操作次数为O(n)。数组:可以方便地寻找读取数据,在随机访问中操作次数为O(1),但删除插入的操作次数为O()二、哈希表三、堆四、分块五、莫队...

2021-05-01 08:28:16 266

原创 数据结构基础(二)

一、并查集:并查集是一种树形结构,处理一些互不相交的集合之间的合并及查询问题,支持查找和合并。1.初始化:每个节点单独属于一个集合。void init(){ for(int i=1;i<=n;i++) fa[i]=i; return;}2.查找:int find(int x){ if(fa[x]==x) return x; else return find(fa[x]);//树的结构固定,未做任何修改}路径压缩:把每个点都直接连到祖先上去,因为只在意是否是同一个集合,即

2021-03-28 18:30:48 235

原创 数据结构基础(一)

一、栈:栈是一种基本的线性数据结构,基于push和pop两种操作。先入后出,后入先出。二、队列:队列是一种基本的线性数据结构,满足先入先出的性质。手写队列初始化:tail=0,head=1;判断队列是否为空:if(head<=tail) //队列不为空else //队列为空三、双端队列:可以在队首/队尾进行插入/删除操作。代码实现:1、数组模拟2、deque四、循环队列:数组模拟队列时,队列尾指针向后移动,可能会到达数组末尾导致溢出,此时数组前端还有空闲,可以循环利用

2021-03-21 21:11:25 200

原创 图论中的连通性问题

无向图连通性问题:有向图连通性问题:并查集:一种树型数据结构,处理一些不相交集合的合并及查询问题。通常在使用中以森林来表示。因为我们不关心树的具体结构,所以不需要记录节点的儿子,只要记录节点的父亲即可。初始时,每个节点自己就是树根。在合并两个集合时,找到这两个集合的根,把其中一个根的父亲设为另一个集合的根。int find(int x){ if(!fa[x]) return x; return find(fa[x]);}void merge(int x,int y){ int rtx=

2021-02-24 11:03:19 507

原创 字符串相关算法

一、概念:(1)最长前后缀公共子串:字符串的一个前缀和一个后缀,如果它们相同,就被称为一个前后缀公共子串。特别地,我们定义最长前后缀公共子串不能是字符串本身。eg:abcdabc->abcaaaaaaa->aaaaaa(2)字符串匹配:模式匹配:子串的定位操作通常称为串的模式匹配。目标串:主串S模式串:子串P匹配成功:若存在P的每个字符依次和S中的一个连续字符序列相等,则称匹配成功。返回P中第一个字符在S中的位置。匹配不成功:返回-1。二、字符串匹配:1、朴素的字符串匹配

2021-02-24 10:40:04 354

原创 数学

一、高精度:高精度运算的输入和存储:1.采用字符串形式输入,并将其转化为整数数组。2.用一个整型变量记录数据的实际长度。读入:const int maxlen=xxx;typedef int hp[maxlen];void read(char s[],hp &a){ memset(a,0,sizeof(a)); int len=strlen(s); a[0]=len; for(int i=0;i<len;i++) a[len-i]=s[i]-'0';}高精度加法:

2021-02-24 10:04:16 121

原创 树状数组&线段树

一、差分&前缀和1.差分:[l,r]整体加k,其实a[l]比前一个多了k,a[r+1]比前一个少了k,即d[l]+=k; d[r+1]-=k。【例】区间加法:给定一个序列a。有很多次操作,每次操作形如:A l r k,即将a[l…r]中的每个值都加上k。输出执行完所有操作后的序列。Length(a)<=10000000Times of operation <=100000002.前缀和令s[i]=∑a[j] (j=1…i)S称为a的前缀和对于序列来说,前缀和和差分互

2021-02-23 19:04:56 316

原创 排序

算法性能分析:是否稳定,空间复杂度,时间复杂度三种O(n2) 的简单排序插入排序冒泡排序选择排序优点:简单,易于实现缺点:复杂性高,不适合大规模数据插入排序://插入排序void insert_sort(int n){ for(int i=1;i<n;i++) for(int j=i;j>0;j--){ if(a[j]<a[j-1]) swap(a[j],a[j-1]); else break; }}//稳定,空间复杂度O(1),时间复杂度平均O(n^

2021-02-22 11:17:12 95

原创 二分&三分

一、二分查找有N个已经从小到大排好序的整数,查找是否存在某个数X?(洛谷 P2249)首先比较序列中点A[mid],如果A[mid]等于X,则查找成功;如果A[mid]比X大,则只可能在序列的左半区间继续查找;如果A[mid]比X小,则只可能在序列的右半区间继续查找。如此分而治之下去,查找的区间每次会折半,可以非常迅速地缩减区间长度。如果区间长度为1时都查找不到X,则最终区间左、右端点会反绕,表示查找失败。#include<cstdio>#include<iostream&gt

2021-02-22 09:11:28 295

原创 动态规划(三)

一、DAG上的DP当题目给定了一张有向无环图(DAG),或原问题可以抽象成一个DAG时,可以在DAG上进行DP来求解问题DAG最短路给定一个城市的地图,所有的道路都是单行道,而且不会构成环。每条道路都有过路费,问您从S点到T点花费的最少费用。f(x)表示从S出发到达x的最少费用f(x)=min(f(y)+w(y, x))实现时如何确定转移顺序?拓扑排序/记忆化搜索均可【例题】旅行计划(洛谷 P1137)#include<cstdio>#include<iostream

2021-02-21 21:46:31 212

原创 动态规划二(上课)

一、树形DP:在树结构上所做的动态规划,基础是树具有严格的层数关系。一般来说树形DP是处理子树的信息以及相互关系来进行转移,其状态一般会表示为以i为根的子树的DP值。1.求最大联通子树一棵n个点的树,每个点i有点权ai,求一棵联通子树使点权和最大n<=10 ^ 5 |ai| <= 10^9f[u]=a[u]+∑max(f[v],0)答案为max(f[i]), i=1…n【例题】洛谷 P1122#include<cstdio>#include<iostream

2021-02-21 19:24:34 149

原创 贪心&树图基础&最小生成树

贪心算法:总是做出当前看来最好的选择,某种意义上的局部最优解。核心是去寻找一种解决问题的方法,如果策略正确,那么往往是易于描述、易于实现的。一、最优装载问题给出n个物体,第i个物体重量为wi。选择尽量多物体,使总重量不超过C。只关心数量,装重的没有装轻的划算。二、部分背包问题有n个物体,第i个物体的重量为wi,价值为vi,选若干个物体,使在总重量不超过c的情况下总价值最大。这里的每个物体都可以只取走一部分,价值和重量按比例计算。综合考虑重量和价值两个因素,计算出每一种物体单位重量的价值,然后

2021-02-21 16:21:30 386

原创 动态规划一(上课)

1.状态怎样定义2.怎样进行状态的转移核心思想:讲一个问题拆成若干子问题,通过求解子问题,来推断原问题的解。性质:1.无后效性,”未来与过去无关“,如果给定某一阶段的状态,则在这一阶段以后过程的发展不受这阶段以前各段状态的影响。2.最优子结构,大问题的最优解可以由小问题的最优解推出。解题条件:能将大问题拆成几个小问题,且满足无后效性,最优子结构性质。【例1】:假设你有足够的1、5、11元面值的钞票。现在你的目标是凑出某个金额w,求需要用到尽量少的钞票数。解:#include<cst

2021-02-20 14:52:08 246

原创 基础搜索(上课)

1.DFS:递归,构建搜索树。【例1】全排列问题:#include<cstdio>#include<iostream>using namespace std;int n;bool vis[1005];int a[1005];void print(){ for(int i=1;i<=n;i++) printf("%d ",a[i]); printf("\n");}void DFS(int x){ if(x==n+1){ print(); ret

2021-01-10 17:26:58 229 1

空空如也

空空如也

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

TA关注的人

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