posted @ 2018-05-16 20:33
lnyzo
阅读(150)
推荐(0)
摘要:
K-D TREE算法原理及实现 板子题,但这题很神奇的是加了一个优化以后直接从11292ms跑成了1548ms(即代码中替换掉注释部分的内容) 优化具体原理应该是先将maxans/minans尽量放大/减小 这题求的是每个点到其他点的最长路径和最短路径,符合kd-tree的应用范围,那么优化的暴力就
阅读全文
posted @ 2018-05-16 19:30
lnyzo
阅读(148)
推荐(0)
摘要:
不建议用cdq,内存达到了159024kb,时间4468ms 这题cdq的想法是:对于两个点(x,y)和(u,v)组成的矩形,我们可以想象成矩形(1,1 u,v)中的所有点减去矩形(1,1 u,y-1)和矩形(1,1 x-1,v)的点,再加上(1,1 x-1,y-1)里的点 x是时间变量,天然有序。
阅读全文
posted @ 2018-05-16 15:32
lnyzo
阅读(191)
推荐(0)
摘要:
splay 120ms sbt(抄板子的)216ms
阅读全文
posted @ 2018-05-16 11:39
lnyzo
阅读(146)
推荐(0)
摘要:
中国剩余定理(孙子定理)模板 在《初等数论》上有详细的解析 这是关于模数两两互质的情况
阅读全文
posted @ 2018-05-15 11:38
lnyzo
阅读(112)
推荐(0)
摘要:
这是极大极小值算法原理,不断递归 alpha_bata算法是对其的一个优化 当当前这轮选的是答案尽量大的值时(pro_max),到(pro_min)里搜索时,去的是尽量小的值,若当前能取到比在pro_max平行的前几轮里更小的,则pro_max里即可避免掉这种方案,取前几种方案pro_min同理
阅读全文
posted @ 2018-05-11 20:56
lnyzo
阅读(108)
推荐(0)
posted @ 2018-05-11 12:26
lnyzo
阅读(110)
推荐(0)
摘要:
f[now][0]表示以当前点为根,且要取该点,满足条件的最小 f[now][1]表示以当前点为根,至少取它的一个儿子,满足条件的最小值 f[now][2]表示他的儿子均被覆盖,满足条件的最小值f[now][0]=val[now]+segma(min(f[son][0~2]));f[now][1]=
阅读全文
posted @ 2018-05-10 20:46
lnyzo
阅读(115)
推荐(0)
摘要:
树形DP#include #include #include #include using namespace std; int indg[152],n,p,cnt,f[152][152],head[152],nex[302],to[302]; void inline read(int &x){ char ch=getchar();x=0; while(!isdigit(ch)...
阅读全文
posted @ 2018-05-09 20:36
lnyzo
阅读(218)
推荐(0)
摘要:
树链剖分裸题 唯一一个要注意的地方就是数据范围吧。计算时不写(long long)是会爆掉的
阅读全文
posted @ 2018-05-09 14:52
lnyzo
阅读(121)
推荐(0)
摘要:
学长的题解:显然,暴力求解的复杂度是无法承受的。考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案。观察到,深度其实就是上面有几个已标记了的点(包括自身)。所以,我们不妨把 z 到根的路径上的点全部 +1,对于 l 到 r
阅读全文
posted @ 2018-05-08 20:58
lnyzo
阅读(128)
推荐(0)
摘要:
给白色边都加上一个值,做kruskal会使得选取的白边数量减少,二分它
阅读全文
posted @ 2018-05-07 18:21
lnyzo
阅读(151)
推荐(0)
摘要:
数列分块1 数列分块2 数列分块3
阅读全文
posted @ 2018-05-06 16:05
lnyzo
阅读(229)
推荐(0)
摘要:
割点的求解与tarjan缩点类似 哪些点可能成为割点?1.有>=两棵子树的根2.儿子能回到的dfn[ ]最小的点仍大于当前点 那么算法出来了dfn[ ]表示其dfs序,low[ ]表示该点能到的dfn[ ]的最小值 ps:为什么不用考虑儿子节点存在>=两个孙子的情况呢?因为在考虑父节点的时候,若其不
阅读全文
posted @ 2018-05-04 23:12
lnyzo
阅读(153)
推荐(0)
摘要:
启发式合并,在合并时将siz较小的合并到siz较大的后面 题意: 有两个操作 1、将所有的x改成y 2、求序列的颜色段 如1 2 2 1 ans=2(m<=1000000) 首先,可以求出初始序列的ans,然后每次修改颜色相当于合并两个颜色,启发式合并。 启发式合并就是将sz小(s1)的暴力加入sz
阅读全文
posted @ 2018-05-03 21:31
lnyzo
阅读(99)
推荐(0)
摘要:
注意要建反图,走逆向拓扑序 若正向无法保证在当前最有的情况下,是否全局最有,而反向则满足
阅读全文
posted @ 2018-05-02 16:51
lnyzo
阅读(109)
推荐(0)
摘要:
状压DP 先判断可行的放法,在递推
阅读全文
posted @ 2018-05-02 16:03
lnyzo
阅读(125)
推荐(0)
摘要:
思路是先对每个(k-1)长度的子字符串之间建边,然后拓扑,若有环则最终仍有indg[i]为 0的 这题用字符串哈希的话会超时 以下是30分做法 满分用map
阅读全文
posted @ 2018-05-01 21:00
lnyzo
阅读(291)
推荐(0)
摘要:
树状数组求第k大值 思路有一点想ST表 将求第k大变为求第(tot-k+1)小的数,tr[i]统计小于等于i的数的总数 每次不断逼近,若当前[ans,ans+(1<<i)]在范围内,则加上,否则直接到下一次循环 过程中的一个地方要注意(详见代码注释)
阅读全文
posted @ 2018-04-30 17:21
lnyzo
阅读(174)
推荐(0)
摘要:
时间比较:SBT:无旋treap:splay:treap 这道题是看着别人的板子大的,思路不难,但过程里有很多细节要注意 首先是treap 然后是splay 3.无旋treap /************************************************************
阅读全文
posted @ 2018-04-29 09:56
lnyzo
阅读(160)
推荐(0)
摘要:
可持久化线段树模板 1.结构体的打法 2.数组打法
阅读全文
posted @ 2018-04-28 18:48
lnyzo
阅读(191)
推荐(0)
摘要:
题目大意:给定矩阵A,求A + A^2 + A^3 + … + A^k的结果(两个矩阵相加就是对应位置分别相加)。输出的数据mod m。k<=10^9。 这道题两次二分,相当经典。首先我们知道,A^i可以二分求出。然后我们需要对整个题目的数据规模k进行二分。比如,当k=6时,有: A + A^2 +
阅读全文
posted @ 2018-04-26 16:55
lnyzo
阅读(263)
推荐(0)
posted @ 2018-04-25 16:41
lnyzo
阅读(147)
推荐(0)
摘要:
描述 组合数C_n^mCnm表示的是从n个物品中选出m个物品的方案数。举个例子,从(1, 2, 3)三个物品中选择两个物品可以有(1, 2), (1, 3), (2, 3)这三种选择方法。根据组合数的定义,我们可以给出计算组合数的一般公式: C_n^m = \frac{n!}{m!(n-m)!}C
阅读全文
posted @ 2018-04-24 19:52
lnyzo
阅读(122)
推荐(0)
摘要:
原来以为是树上DP,后来发现中序遍历的连续性,就变成区间动规了 f[i][j]表示从i到j能取得的分数最大值,rt[i][j]表示取得最大值是该段区间的根
阅读全文
posted @ 2018-04-23 20:24
lnyzo
阅读(134)
推荐(0)
摘要:
期望DP和概率DP Fi,j×Fi,j× (1−pi+1)j−>Fi+1,j(1−pi+1)j−>Fi+1,j 1−(1−pi+1)j−>Fi+1,j−1 #include<cstdio> #include<cctype> #include<cstring> using namespace std;
阅读全文
posted @ 2018-04-22 13:27
lnyzo
阅读(124)
推荐(0)
摘要:
树链剖分: fa[ ]父亲节点;son[ ]重儿子节点;siz[ ]以该点为根的子树的大小; id[ ]该点在两次dfs后形成序列中的位置;dep[ ]该点深度; wt[ ]两次dfs后形成的序列;top[ ]该点所在链的链头 1.dfs1先求出每个点的深度,父亲节点和以该点为根的子树的大小,并找到
阅读全文
posted @ 2018-04-20 22:40
lnyzo
阅读(281)
推荐(0)
摘要:
先读入所有数据,离散一遍 从1-n给每个点建立一颗线段树,若询问区间l-r的第k大,则只要让【第r棵树一段前缀区间内点的个数】-【第l-1棵树一段前缀区间内的点的个数】=k(实际上有可能不是等于,而是大于等于,因为可能存在多个相同的数),该区间最后一个数即为答案
阅读全文
posted @ 2018-04-20 13:44
lnyzo
阅读(116)
推荐(0)
摘要:
主席树 为什么说本题是福利呢?因为这是一道非常直白的可持久化线段树的练习题,目的并不是虐人,而是指导你入门可持久化数据结构。 线段树有个非常经典的应用是处理RMQ问题,即区间最大/最小值询问问题。现在我们把这个问题可持久化一下: Q k l r 查询数列在第k个版本时,区间[l, r]上的最大值 M
阅读全文
posted @ 2018-04-20 10:57
lnyzo
阅读(108)
推荐(0)
摘要:
二分在q位置上的数。其他数若大于它,则为1,否则为0,最后若该位上的数为0,则区间右移l,否则左移r check过程中用线段树维护,降序升序可以用区间复制实现
阅读全文
posted @ 2018-04-20 09:40
lnyzo
阅读(132)
推荐(0)
摘要:
最小费用最大流模板题 思路和网络流的EK算法类似, 1.建正向边,反向边(反向边流量为0,花费为负数:走反向边即取消上次走过后增加的值,因此如此定义) 2.用spfa增广,找到流量大于0且由花费决定的最小dis[ t ],接着回溯,找到能通过的最大流量(minn) 3.ansflow+=minn;a
阅读全文
posted @ 2018-04-20 09:33
lnyzo
阅读(127)
推荐(0)
posted @ 2018-04-18 08:58
lnyzo
阅读(89)
推荐(0)
摘要:
悬线法左右推,推出面积最大 这里有一篇好的博文有助理解 https://blog.csdn.net/twtsa/article/details/8120269
阅读全文
posted @ 2018-04-18 07:11
lnyzo
阅读(118)
推荐(0)
posted @ 2018-04-18 06:58
lnyzo
阅读(130)
推荐(0)
摘要:
lca问题 1.树链剖分 2.tarjan算法 遍历一棵树,不断更新当前节点子节点的父亲。。。具体可看代码,不难 3.dfs+倍增
阅读全文
posted @ 2018-04-14 18:28
lnyzo
阅读(136)
推荐(0)
摘要:
动态规划,挺经典的 两次取的序列一样,可以看成两个人分别玩一次,然后两个人得到的序列一样. f [ i ][ j ][ k ]表示已经用了 i 个球,,第一个人在上方取了j个,第二个人在上方取了k个的答案.
阅读全文
posted @ 2018-03-30 14:56
lnyzo
阅读(101)
推荐(0)
摘要:
题目描述 Description 题目描述 Description 给你N个数,有两种操作:1:给区间[a,b]的所有数增加X2:询问区间[a,b]的数的和。 输入描述 Input Description 输入描述 Input Description 第一行一个正整数n,接下来n行n个整数, 再接下
阅读全文
posted @ 2018-03-14 21:09
lnyzo
阅读(276)
推荐(0)