c++提高1
文章平均质量分 67
本专栏包含尺取法、最短路、二分图、拓扑排序、最大最小生成树、线段树、欧拉回路等内容
{∞}
自然选择,前进四!
展开
-
【c++提高1】树状数组
1.树状数组简述2.树状数组的思想3.基础问题的扩展:树状数组求任意区间4.树状数组代码实现。原创 2023-02-07 19:30:24 · 609 阅读 · 1 评论 -
usaco铜组【2023.1月赛】
1.29,第一次打usaco,成功晋级。原创 2023-02-04 17:55:43 · 583 阅读 · 4 评论 -
atcoder11-16日刷题总结
4.abc270-D 设f_i表示剩下i颗石头时Takahashi可以获得的最大石子数,那么如果我们这次拿走了a_j颗石子,然后对方最多获得f_i-aj颗石子,剩下的i-f_(i-a_j)颗石子就是Takahashi的了。第一次是二分目标点x的位置,对于中点mid,如果矩阵[(1,1),(mid,n)]的棋子数量等于mid,那么就是l移动,否则就是移动r。二分一个x,表示对于每一个篮子i,都拿出min(ai,x)个苹果的情况,显然我们需要的答案时最大的x。注意:存的时候不能把>n的存了,否则会re。原创 2023-01-17 21:18:47 · 665 阅读 · 0 评论 -
【c++提高1】二叉树&二叉堆(万字总结)
二叉树是N个节点的有限集合(N是自然数),当N=0时,那么就是一个空集合(叫空二叉树)。总的来讲(N>0的情况),二叉树就是由一个根节点和两棵子树组成的。然而,从名字就可以看出来,二叉树的每一个节点最多都只有两棵子树(分别称为左子树和右子树)二叉堆使用完全二叉树实现,分为大根堆和小根堆两种:大根堆:任意一个分支结点的值都大于或者等于其子节点的值。小根堆:任意一个分支结点的值都小于或者等于其子节点的值。原创 2022-12-20 21:57:16 · 690 阅读 · 3 评论 -
【c++提高1】单调队列
i = a;i = a;i = a;i = a;i = a;i原创 2022-11-08 19:31:45 · 788 阅读 · 0 评论 -
【c++提高1】进阶模板
【代码】【c++提高1】进阶模板。原创 2022-09-17 14:42:43 · 304 阅读 · 1 评论 -
【c++提高1】数据结构之线段树详解
线段树的思想是将一个区间[1, n]划分成两个区间:[1, n/2]和[n/2+1, n],接下来继续划分:[1, n/4], [n/4+1,n/2]和[n/2+1, n/2+n/4-1], [n/2+n/4,n]…示例:n = 81.pushup函数2.pushdown3.build4.modify5.query1.线段树的儿子存储2.线段树的节点信息存储定义一个结构体,里面存储改节点信息和当前这个节点所管辖的区间的左右端点。1.建树函数build递归建树。怎样判断当前节点是叶子节点呢?2.查原创 2022-09-09 21:04:12 · 1686 阅读 · 0 评论 -
【c++提高1】数据结构之分块(预处理+暴力)
1.分块思想2.分块实现操作。原创 2022-09-06 21:11:22 · 441 阅读 · 4 评论 -
【c++提高1】数据结构之哈希表
1.哈希表存储方式2.哈希表应用:散射表3.哈希表变形:字符串哈希4.例题。原创 2022-09-06 13:30:46 · 569 阅读 · 9 评论 -
【c++提高1】数据结构之单调栈
单调栈是栈的一种特殊的形式,必须要求栈内元素单调,当题目有单调性的话(不是答案具有单调性,是信息具有单调性),一般可以使用单调栈,避免重复执行不必要的操作,从而将时间复杂度降低。单调栈没有什么特定的算法,也没有啥模板,所以就不讲太多关于单调栈算法一类的东西了就将一些例题吧。原创 2022-08-23 16:52:36 · 797 阅读 · 3 评论 -
【单调栈】直方图中的最大子矩阵
目标是找到每一个点向左右最长能延申的从长度,可以使用单调栈解决。枚举[1, n],向两边延申,计算面积取最大值。时间复杂度:O(N^2)原创 2022-08-23 15:23:32 · 105 阅读 · 0 评论 -
【c++提高1】迭代加深搜索&双向搜索
迭代加深搜索:首先深度优先搜索d层,若没有找到可行解,再深度优先搜索d+1层,以此类推,直到找到可行解为止。① 首先搜索A部分的礼物,将搜索出的重量在[0, w]之间的所有值保存为数组X,并排序去重。② 接着搜索B部分的礼物,对于搜索出的每个...原创 2022-08-18 23:00:49 · 349 阅读 · 0 评论 -
【c++提高1】IDA*
考虑将估价函数和DFS相结合,DFS有个缺点,就是一旦估价出现失误,容易向下递归深入一。为了规避DFS的缺点,考虑将估价函数和迭代加深的DFS算法相结合。算法的本质是带估价函数的优先队列BFS。然后,以迭代加深DFS的搜索框。架为基础,把原来简单的深度限制加强为:若当前深度 + 未来估计步数 > 深度限制,在不超过该深度的前提下执行DFS,如果找不到解就扩大深度限制,重新进行搜索。其估价,耗费空间较大,时间也较大(每次操作需要log(n))的时间。设计一个估价函数,估算从每个状态到目标状态需要的步数。...原创 2022-08-18 22:16:09 · 167 阅读 · 0 评论 -
【c++提高1】STL超详细讲解
一、基础STL二、STL的迭代器遍历三、for(auto it:S)遍历STL四、STL函数。原创 2022-08-16 10:32:47 · 1009 阅读 · 8 评论 -
【c++提高1】A star
A st。原创 2022-08-15 18:23:22 · 139 阅读 · 0 评论 -
【c++提高1】最近共先祖LCA优化求法
1.树上倍增&欧拉序+RMQ2.Tarjan3.例题。原创 2022-08-15 18:06:22 · 908 阅读 · 3 评论 -
【dp树状数组优化】跳跃(jump)
这道题是求一个dp[i]的题,dp[i]=dp[j]-sum[j]的最大值+sum[i]-i;③[i-2,i]一起摘d[i]=d[i-3]-i+sum(i-2,i);②i和i-1一起摘d[i]=d[i-2]-i+a[i]+a[i-1];i[1,i]一起摘d[i]=d[0]-i+sum(1,i);其实他就是一个前缀问题,因为j是在一个前缀范围(0~i-1)①i单独一次摘d[i]=d[i-1]-i+a[i];...原创 2022-07-26 14:42:33 · 463 阅读 · 0 评论 -
【c++提高1】图
深度优先遍历从G中任选一个未遍历过的顶点u出发,访问此顶点,然后依次从u的未被访问的邻接点出发,深度优先遍历图,直至图中所有和u有路径相通的顶点都被访问到。非网图中两顶点s,t之间的最短路径问题,我们只需要从顶点s出发,对图作广度优先搜索(BFS),利用BFS层层访问,由近及远的特点,一旦遇到顶点t就终止。图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为G(V,E),其中G表示一个图,V是图G中顶点的集合,E是图G中边的集合。树固定从根节点开始遍历,图的开始顶点不固定。...原创 2022-07-22 20:38:21 · 533 阅读 · 0 评论 -
【Acwing】从1到n整数中1出现的次数
当前位等于1时(n=1214)很显然,十位出现1的次数此时与更低位有关,个位为k则出现k+1次,ans+=k+1。(举例10,11,12,13,14,15,16,17,18,19)n为五位数vwxyz,当i为个位时(即i=1时),则把vwxy这个四位数记为a,b为空(此时b=0代表没有值)当前位为0时(n=1204)第13轮十位只循环到0,不会出现1,结果不变,ans=ans。问如果按位算,当n=11111时,个位时加1,十位时也加1,不会算重复么?...原创 2022-07-21 18:16:10 · 143 阅读 · 0 评论 -
【Acwing】背包
【Acwing】背包原创 2022-07-21 18:05:00 · 63 阅读 · 0 评论 -
【二分 + vector 或 map】学籍表整理
但是如果直接枚举的或复杂度是O(n^2)做一个标记,表示学生i是否被开除或留级。原创 2022-07-19 20:02:59 · 106 阅读 · 0 评论 -
【数论】 最小公倍数的最小和[Minimum Sum LCM,UVa10791]
代码】【数论】最小公倍数的最小和[MinimumSumLCM,UVa10791]原创 2022-07-17 12:42:38 · 265 阅读 · 2 评论 -
【c++提高1】树
🔑引入Q:小Z的堂兄弟和小科拥有同一个爷爷(双亲的双亲),不同的父亲(双亲结点)。使用双亲表示法,记录下每个人的双亲。枚举所有节点,如果其和小Z的双亲的双亲是同一人,且双亲不是同一人,那么他是小科的堂兄弟。注意:树中堂兄的定义是,双亲在同一层(不是同一结点)的结点互为堂兄弟。代码:树(Tree)是n(n ≥ 0)个结点的有限集。 n == 0时称为空树。在任意一棵非空树中:树中的元素称为:结点。有且仅有一个称为根(Root)的结点,如图中的A结点。当n > 1时,根以外的结点可分为m(m.原创 2022-07-13 12:59:59 · 799 阅读 · 1 评论 -
【c++提高1】分治
🔑解题算法1:朴素枚举,时间复杂度O(n)算法2:分治+同余定理: 时间复杂度:O(log2(n)① 当b是偶数时:a ^ b = a ^ (b / 2) * a ^ (b / 2)② 当b是奇数时:a * b = a ^ (b / 2) * a ^ (b / 2) * a然而接下来重复判断b / 2,并接下来再算b / 2 / 2,所以可以使用递归的方法计算。例:b = 8为了防止超限,那么通过同余定理,可以在计算的过程中% n,防止数据溢出:步骤:① 分解:将a ^ b 划分为两个相.原创 2022-07-13 11:24:48 · 91 阅读 · 0 评论 -
【c++提高1】优化DP专题:状压DP & 倍增优化DP & 环形DP的单调队列优化DP
这是c++提高的第一讲动态规划是解决“多阶段决策最优化问题”的一种算法思想。阶段的划分决定了状态的定义,状态定义的一个重要特性就是要确保**“无后效性”。**很多DP问题在定义状态的时候,为了确保无后效性,需要在状态中加入多个维度,如果每个维度都用一维数组来表示的话,当维度较多时会导致占用的空间太大。很多时候状态的维度虽然很多,但是决策非常少,特别的很多时候只有两种决策。例如背包问题中每个物品只有0和1两种决策。对于这种情况,没有必要为每个维度都分配一维空间,而是用一个二进制数来存储所有维度,每个二进制原创 2022-07-11 12:07:29 · 730 阅读 · 1 评论