总结
fxt275307894a
这个作者很懒,什么都没留下…
展开
-
浅谈股票类问题
题面传送门这道题显然是对于每个卖出股票,在前面找到最小的买进,统计答案即可。代码实现:class Solution {public: int maxProfit(vector<int>& prices) { int a[1000039]; int i,j,ans=0,tot=0; int n=prices.size()-1; for(i=0;i<=n;i++) a[i]=prices[i];原创 2020-10-20 19:35:38 · 114 阅读 · 0 评论 -
luogu P3384 【模板】轻重链剖分
题面传送门这道题是树剖模板。树剖第一步:dfs1dfs1dfs1,找出每个点子树大小,父亲节点,重儿子,深度。第二步:dfs2dfs2dfs2,找出每个点编号,把原来的权值赋值过来,先标重儿子再标轻儿子,标记每个链顶。这里最大的点最多只有lognlognlogn条链。因为每更换一条链都要一个轻链,而点数会除以222修改两点距离就直接哪个深度大哪个先跳,复杂度log2nlog^2nlog2n查询两点距离相同修改子树直接因为编号连续就直接查询整段,复杂度lognlognlogn查询相同代码实原创 2020-06-21 16:12:26 · 143 阅读 · 0 评论 -
lugou P2863 [USACO06JAN]The Cow Prom S
题面传送门这道题很明显是要我们求强连通分量。我们可以用TarjanTarjanTarjan求。对于TarjanTarjanTarjan的求法,是这样做的:记录第几个访问到:用一个dfndfndfn数组。记录这个点的子树能访问到的最早访问到的点,为lowlowlow。记录一个栈,表示没有弹出的点。记录visvisvis,表示是否在栈里。对于每个点,从它的边走出去的一个点vvv。若这个点在栈中,那么这个店肯定不属于这个强连通分量,那么就不用搜索,直接获取即可。如果不在栈中,那么就搜索,并更新答原创 2020-06-21 16:01:27 · 151 阅读 · 0 评论 -
exgcd
看来别的博客都没有讲清楚,那我就来讲一下。一下纯属作者个人思路,若有不对请提出。在这篇文章中,///表示向下取整的除。求ax+by=cax+by=cax+by=c的解显然是不定方程。有无解我们可以用裴蜀定理验证,此处当做其有解。我们可以尝试用yyy表示出xxx,比如这样:x=c−byax=\frac{c-by}{a}x=ac−by考虑常数分离一下,得到x=⌊ca⌋+c−b(y%x)ax=\left\lfloor\dfrac{c}{a}\right\rfloor +\frac{c-b(y\%x)原创 2020-05-08 20:00:41 · 158 阅读 · 0 评论 -
分块—优雅的暴力 --- qzezoj 1411: 【分块】小A的课堂
题面传送门算法简介:分块主要是一个修改,维护区间的东西,它可以做到一边修改一边查询,区间修改 O(sqrt(n))O(sqrt(n))O(sqrt(n)),区间查询 O(sqrt(n))O(sqrt(n))O(sqrt(n)),单点修改$ O(1),单点查询,单点查询,单点查询 O(1)$。算法实现:初始化:首先要把基本数组(以下简称 aaa 数组,长度为nnn)分成$ m $块。一般是...原创 2020-03-15 12:57:25 · 133 阅读 · 0 评论 -
RMQ --- luogu P3865 【模板】ST表
算法简介:RMQRMQRMQ是一个经典的动态规划问题,是可以O(1)O(1)O(1)时间求静态区间最大值的东西,不过需要O(nlog2n)O(nlog^2n)O(nlog2n)的预处理算法实现:我们定义fi,jf_{i,j}fi,j表示以iii为起点,向后2j2^j2j个数中最大值。两重循环,一重枚举iii,一重枚举jjj那么可以得到状态转移方程:fi,j=max(fi,j−1,fi+2j−...原创 2020-03-14 21:16:07 · 117 阅读 · 0 评论 -
马拉车算法
马拉车算法是一种计算最长回文子串的算法,以其优秀的线性复杂度闻名于世,相较于O(n2)O(n^2)O(n2)的dpdpdp算法和会被特殊数据卡到O(n2)O(n^2)O(n2)的暴力算法,马拉车算法无疑是求解最长回文子串的最优选择。最长回文子串分为偶数串和奇数串,为了避免这些问题,马拉车算法将每个字符与字符间插入一个特殊字符,在两头插入不同的字符,以免越界。马拉车算法定义:rrr为当前已知的对...原创 2020-03-18 11:16:04 · 150 阅读 · 0 评论 -
浅谈链表应用
题面传送门链表,顾名思义,就是一根链,由许多节点构成,每个节点分为两个部分:数据域和指针域,其中数据域可以包含很多数据,指针域只能包含一个指向对象,不然就成图了。链表可以O(1)O(1)O(1)插入和删除数据,但不能随机访问元素。链表实现就不再乱说了。毕竟是个人都会。主要讲一些链表的应用。这道题很简单,只要顺着链表找下去,找到第m个点就删掉就好了。代码实现:#include<cst...原创 2020-03-27 09:25:39 · 145 阅读 · 0 评论 -
再谈二分
题面传送门简单题哈,简单题。我们二分能组成的套数,再遍历一遍找到答案。若答案大于mmm,那么收拢右边界。如果答案小于mmm,那么收拢左边界。代码实现:#include<cstdio>using namespace std;int n,m,a[139],l,r,mid,b[139];long long ans;int main(){ register int i,...原创 2020-03-25 11:48:55 · 118 阅读 · 0 评论 -
二分—单调性优化
题面传送门算法简介:二分查找(答案),时间复杂度O(log2n)O(log^2n)O(log2n).可以在一个有序表中快速查找某个数。可以利用这个性质来二分答案来做到快速有效枚举。算法实现:对于一个有序表,二分查找一个数是否存在。首先定义边界值:l=0l=0l=0,r=max(ai)+1r=max(a_{i})+1r=max(ai)+1;然后取中值mid=(l+r)2mid=\frac{(...原创 2020-03-18 11:36:39 · 231 阅读 · 0 评论 -
树状数组—高级数据结构 --- luogu P3374 【模板】树状数组 1&&luogu P1908逆序对
题面传送门算法简介:树状数组是一颗类似于树的数组,他虽然画出来是一棵树,但在实现中还是一个数组,它可以维护具有传递性质的信息,比如区间和,区间乘积等。他可以查询1−i1-i1−i的信息。他支持单点修改,单点查询与区间查询,区间修改较为繁琐,需要用到差分数组,他的复杂度是查询o(log2n)o(log^2n)o(log2n),修改o(log2n)o(log^2n)o(log2n)。算法实现:这是...原创 2020-03-14 14:20:18 · 119 阅读 · 0 评论 -
线段树—比分块更牛逼 --- luogu P3372 【模板】线段树 1
题面传送门线段树每个根节点管理下面的两个叶子节点,线段树的每一个节点都分管区间,其中若根节点分管区间是xxx,yyy,那么左儿子区间为xxx,(x+y)>>1(x+y)>>1(x+y)>>1,右儿子分管区间是((x+y)>>1)+1((x+y)>>1)+1((x+y)>>1)+1,yyy.我们定义fff数组,以fxf_xf...原创 2020-03-14 14:11:59 · 112 阅读 · 0 评论 -
差分—基础数据结构 --- luogu P2484 [SDOI2011]打地鼠&&luogu P1083 借教室
题面传送门首先明确,这是一道差分裸题,不要被它的蓝标签吓到。算法简介:差分是一种和前缀和类似的数据结构,毕竟在差分过程中要进行前缀和,所以前缀和是差分的基础。差分能做到O(1)O(1)O(1)修改,但要O(n)O(n)O(n)查询,适用范围不如前缀和。差分适合查询极少,修改大大多于查询的题目。算法实现: 首先我们定义差分数组s与基本数组a。修改:我们要让x=5x=5x=5,y=9y=9y=...原创 2020-03-14 12:27:43 · 332 阅读 · 0 评论 -
前缀和—基础数据结构 --- luogu P2280 [HNOI2003]激光炸弹&&luogu P5638 【CSGRound2】光骓者的荣耀
题面传送门算法简介:前缀和是一种十分基础的数据结构,它与树状数组功能类似,可以维护可以区间相减的信息。预处理O(n)O(n)O(n),并能做到查询复杂度O(1)O(1)O(1)。不支持修改,若修改须重构整个前缀和数组。算法实现:我们需要一个前缀和数组sss与基本数组aaa,定义sis_isi为∑j=1iaj\sum\limits_{j=1}^{i}{a_j}j=1∑iaj.预处理:我们...原创 2020-03-14 11:01:34 · 187 阅读 · 0 评论