09 2019 档案
摘要:单调栈 这是某次olinr巨佬给我们出的考试题。首先暴力O(n2)是不能过的(~~废话~~),我们考虑每一个数值对答案的贡献,也就是ta能当最小值的序列个数。 倘若ta能成为最小值,那么也就是在这个数列里没有比ta大的数值,这也就转化为了求出右边第一个比ta小的值的位置和左边第一个比ta小的值
阅读全文
摘要:单调栈 只是一个比较简单的单调栈题目。我们换一种思考方式,我们枚举每段数列的最小值,然后我们发现当ta所能成为最小值的范围越大,对最终的答案的贡献也就越大。所以我们考虑求出ta所能成为最小值的数列的范围。 这也就转化为了求出右边第一个比ta小的值的位置和左边第一个比ta小的值的位置的问题。这可以用单
阅读全文
摘要:分块 提供几个必须要知道的注意事项。 首先暴力统计区间众数的时间复杂度为接近O(n2),时间复杂度不够优秀,所以我们 ~~遇事不决先分块~~考虑分段处理。数据范围比较大,所以我们离散化。所谓离散化就是将数据排好序后用ta的排名来代替ta本身(需要另开一个数组)。nlog(n)时间内就能完成
阅读全文
摘要:ODT&二分 看到没有人写关于ODT的题解,所以我决定来一发ODT题解。 首先这道题的的整体思路就是二分,关于二分的正确性可以感性的理解一下:我们每一次二分一个答案,然后将<mid的值变为1,≥mid的变为0,每一次只用对0/1序列进行操作,倘若最后我们询问的位置上为0,说明这个位置
阅读全文
摘要:ODT 这道题目太毒瘤啦,经过了无数遍的TLE、WA,和RE(TAT),我终于了解了珂朵莉树的强(R)大(E),我会详细的介绍关于TLE,WA和RE的原因。 首先我们看到区间赋值操作和保证数据随机,我们的第一直觉肯定是珂朵莉树啦,虽然在刻意构造的数据下她的时间复杂度是错误的,但是在随机数据下她的表现
阅读全文
摘要:差分 题目大意:一共有n座桥,每个桥都有一个高度,海水每次都会涨落,问被淹次数大于等于k的桥一共有多少座。 对于海水的涨落,可以看成是区间加法(被淹的桥次数加一),暴力搞的话肯定会TLE,所以我们珂以用差分来实现区间加法,从l到r加上x就相当于差分数组里的l处+x,r+1处 x,因为这个题还需要记录
阅读全文
摘要:DP 根据题目下面的提示&说明,我们就能知道做这个题的大体思路:先求出来每一个数的素数因子,然后就开始DP。 求素数因子的方法就是用类似于欧拉筛的操作,倘若一个数一直都没有被筛到过,那么ta就是一个素数,然后我们就可以用ta来继续筛其它的数,并且我们只用筛ta的倍数,因为只有ta的倍数才含有这个素因
阅读全文
摘要:搜索 提供一种不一样的做法。 我在写这个题的时候刚刚学了二分和搜索 ~~还不会最短路~~,就把这个题当做二分题写了。可能是数据比较水吧。首先看到最小值最大或者最大值最小,我们的第一直觉就是二分答案。 我们二分最大值,我们只走那些小于等于二分的答案的路,如果我们能够走到终点,就说明我们设置的条件比较弱
阅读全文
摘要:本模板可能存在缺陷,请阅读后使用。 众所周知,高精度一直都是非常不友好滴~,所以wljss在这里为大家提供一下重载后的结构体高精度(可处理负数,但比较符号比较的是绝对值),还是非常实用滴^_^.(感谢神佬@yych 的补充) 本模板不定期更新,若有错误之处还望不吝赐教,目前重载的符号有: 1.*:高
阅读全文
摘要:高精&模拟 提供一种不一样的高精度写法。 我们可以使用结构体来模拟高精度,顺便重载一下+ ×就可以啦。但是我们很快就会发现一些问题,如果正数减负数怎么办?~~用Pascal~~当然是大力讨论啦。 我们可以先不管数的正负,在进行加减的时候只处理 正数加正数 和 大的整数减小的
阅读全文
摘要:状压DP 首先感谢lrj的透彻讲解. 我们要使一项服务瘫痪,就必须选择一些计算机,使它们与他们所相连的计算机是所有的计算机,即:我们将每一个计算机本身及其相连的计算机看成一个集合Pi,我们要分成尽量多的集合,使每一个集合里Pi∪...∪Pj为全集。 我们又发现n的值比较小,因此我们可以考虑
阅读全文
摘要:二分图匹配 我们都能够想到让每个装备和它的属性去连边. 首先提供一种初步想法: 如果我们闭着眼去跑二分图匹配的最大匹配,那么我们得到的答案很显然是错误的.因为我们在得到最大匹配的时候没有考虑从1到n的连续性。 那我们该怎么办呢?~~睁开眼再去跑二分图匹配的最大匹配~~ 我们可以二分一个答案,
阅读全文
摘要:分治 首先感谢lrj的透彻讲解。 开始的时候我们可以用map来求出一个数的上一次出现的位置和下一次出现的位置,然后能判断一个数在l到r中这个数是否只出现了一次。 既然任意连续子序列都至少有一个元素唯一,那么我们可以找到这个序列中一个唯一存在的数,我们姑且认为ta的下标是k,进而我们发现任何包
阅读全文
摘要:贪心 对于每一项的交换,设交换前内存为a,交换后内存为b,那么就有a b或a≤b。 我们分开处理,将a b的分为一类,a \le≤ b分为另一类,显然,我们将第一类按照a从小到大排序更优,这样我们就可以用较少的空间换取更大的空间。 将第二类按b从大到小排序,这样我们能花费较少的空间来换取
阅读全文
摘要:矩阵加速递推 n的范围比较小,k的范围很大,我们可以考虑从n入手。 1.首先我们知道任何矩阵 单位矩阵都不会改变. 所以对于交换操作,我们可以造出一个这样的矩阵: 除了第s、m行,其他每一行都是f[i][i]=1; 第s行:f[s][m]=1;第m行:f[m][s]=1; 这样我们就完成了交换操作。
阅读全文
摘要:数位DP|记忆化搜索 ~~听隔壁巨佬说DP和记搜可以互相转换~~ 显然这个题是可以用记忆化搜索过的,那我们应传哪几个参数? 首先就是记搜最基本的位置标记。 然后就是枚举的数字各位之和,以及取模之后的余数(判断能否整除某个数)。 最后就是判边界的参数。 当我们搜到最后一位时如果余数为0,并且各位之和=
阅读全文
摘要:状压bfs 一共有16个位置,最多会有 216=65536 种情况,用数组完全开的下。 用二进制中的1表示该位置有玩具,0表示该位置没有玩具。 由于广搜最先搜到的是最优解,直接用数组记录是否到达过该状态,顺便记录ans. 移动前的状态ans为0. 然后大力讨论12种情况即可 时间复杂度O(
阅读全文