摘要: 板子,和1941非常像 阅读全文
posted @ 2018-05-16 20:33 lnyzo 阅读(147) 评论(0) 推荐(0) 编辑
摘要: K-D TREE算法原理及实现 板子题,但这题很神奇的是加了一个优化以后直接从11292ms跑成了1548ms(即代码中替换掉注释部分的内容) 优化具体原理应该是先将maxans/minans尽量放大/减小 这题求的是每个点到其他点的最长路径和最短路径,符合kd-tree的应用范围,那么优化的暴力就 阅读全文
posted @ 2018-05-16 19:30 lnyzo 阅读(146) 评论(0) 推荐(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 阅读(187) 评论(0) 推荐(0) 编辑
摘要: splay 120ms sbt(抄板子的)216ms 阅读全文
posted @ 2018-05-16 11:39 lnyzo 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 中国剩余定理(孙子定理)模板 在《初等数论》上有详细的解析 这是关于模数两两互质的情况 阅读全文
posted @ 2018-05-15 11:38 lnyzo 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 这是极大极小值算法原理,不断递归 alpha_bata算法是对其的一个优化 当当前这轮选的是答案尽量大的值时(pro_max),到(pro_min)里搜索时,去的是尽量小的值,若当前能取到比在pro_max平行的前几轮里更小的,则pro_max里即可避免掉这种方案,取前几种方案pro_min同理 阅读全文
posted @ 2018-05-11 20:56 lnyzo 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 分别按照x,y排序 阅读全文
posted @ 2018-05-11 12:26 lnyzo 阅读(97) 评论(0) 推荐(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 阅读(112) 评论(0) 推荐(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 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 树链剖分裸题 唯一一个要注意的地方就是数据范围吧。计算时不写(long long)是会爆掉的 阅读全文
posted @ 2018-05-09 14:52 lnyzo 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 学长的题解:显然,暴力求解的复杂度是无法承受的。考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案。观察到,深度其实就是上面有几个已标记了的点(包括自身)。所以,我们不妨把 z 到根的路径上的点全部 +1,对于 l 到 r 阅读全文
posted @ 2018-05-08 20:58 lnyzo 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 给白色边都加上一个值,做kruskal会使得选取的白边数量减少,二分它 阅读全文
posted @ 2018-05-07 18:21 lnyzo 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 数列分块1 数列分块2 数列分块3 阅读全文
posted @ 2018-05-06 16:05 lnyzo 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 割点的求解与tarjan缩点类似 哪些点可能成为割点?1.有>=两棵子树的根2.儿子能回到的dfn[ ]最小的点仍大于当前点 那么算法出来了dfn[ ]表示其dfs序,low[ ]表示该点能到的dfn[ ]的最小值 ps:为什么不用考虑儿子节点存在>=两个孙子的情况呢?因为在考虑父节点的时候,若其不 阅读全文
posted @ 2018-05-04 23:12 lnyzo 阅读(147) 评论(0) 推荐(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 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 注意要建反图,走逆向拓扑序 若正向无法保证在当前最有的情况下,是否全局最有,而反向则满足 阅读全文
posted @ 2018-05-02 16:51 lnyzo 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 状压DP 先判断可行的放法,在递推 阅读全文
posted @ 2018-05-02 16:03 lnyzo 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 思路是先对每个(k-1)长度的子字符串之间建边,然后拓扑,若有环则最终仍有indg[i]为 0的 这题用字符串哈希的话会超时 以下是30分做法 满分用map 阅读全文
posted @ 2018-05-01 21:00 lnyzo 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 树状数组求第k大值 思路有一点想ST表 将求第k大变为求第(tot-k+1)小的数,tr[i]统计小于等于i的数的总数 每次不断逼近,若当前[ans,ans+(1<<i)]在范围内,则加上,否则直接到下一次循环 过程中的一个地方要注意(详见代码注释) 阅读全文
posted @ 2018-04-30 17:21 lnyzo 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 时间比较:SBT:无旋treap:splay:treap 这道题是看着别人的板子大的,思路不难,但过程里有很多细节要注意 首先是treap 然后是splay 3.无旋treap /************************************************************ 阅读全文
posted @ 2018-04-29 09:56 lnyzo 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 可持久化线段树模板 1.结构体的打法 2.数组打法 阅读全文
posted @ 2018-04-28 18:48 lnyzo 阅读(178) 评论(0) 推荐(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 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 树链剖分 阅读全文
posted @ 2018-04-25 16:41 lnyzo 阅读(142) 评论(0) 推荐(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 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 原来以为是树上DP,后来发现中序遍历的连续性,就变成区间动规了 f[i][j]表示从i到j能取得的分数最大值,rt[i][j]表示取得最大值是该段区间的根 阅读全文
posted @ 2018-04-23 20:24 lnyzo 阅读(128) 评论(0) 推荐(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 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 树链剖分: fa[ ]父亲节点;son[ ]重儿子节点;siz[ ]以该点为根的子树的大小; id[ ]该点在两次dfs后形成序列中的位置;dep[ ]该点深度; wt[ ]两次dfs后形成的序列;top[ ]该点所在链的链头 1.dfs1先求出每个点的深度,父亲节点和以该点为根的子树的大小,并找到 阅读全文
posted @ 2018-04-20 22:40 lnyzo 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 先读入所有数据,离散一遍 从1-n给每个点建立一颗线段树,若询问区间l-r的第k大,则只要让【第r棵树一段前缀区间内点的个数】-【第l-1棵树一段前缀区间内的点的个数】=k(实际上有可能不是等于,而是大于等于,因为可能存在多个相同的数),该区间最后一个数即为答案 阅读全文
posted @ 2018-04-20 13:44 lnyzo 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 主席树 为什么说本题是福利呢?因为这是一道非常直白的可持久化线段树的练习题,目的并不是虐人,而是指导你入门可持久化数据结构。 线段树有个非常经典的应用是处理RMQ问题,即区间最大/最小值询问问题。现在我们把这个问题可持久化一下: Q k l r 查询数列在第k个版本时,区间[l, r]上的最大值 M 阅读全文
posted @ 2018-04-20 10:57 lnyzo 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 二分在q位置上的数。其他数若大于它,则为1,否则为0,最后若该位上的数为0,则区间右移l,否则左移r check过程中用线段树维护,降序升序可以用区间复制实现 阅读全文
posted @ 2018-04-20 09:40 lnyzo 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 最小费用最大流模板题 思路和网络流的EK算法类似, 1.建正向边,反向边(反向边流量为0,花费为负数:走反向边即取消上次走过后增加的值,因此如此定义) 2.用spfa增广,找到流量大于0且由花费决定的最小dis[ t ],接着回溯,找到能通过的最大流量(minn) 3.ansflow+=minn;a 阅读全文
posted @ 2018-04-20 09:33 lnyzo 阅读(122) 评论(0) 推荐(0) 编辑
摘要: treap,区间DP 阅读全文
posted @ 2018-04-18 08:58 lnyzo 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 悬线法左右推,推出面积最大 这里有一篇好的博文有助理解 https://blog.csdn.net/twtsa/article/details/8120269 阅读全文
posted @ 2018-04-18 07:11 lnyzo 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 主要是想巩固一下高精度 阅读全文
posted @ 2018-04-18 06:58 lnyzo 阅读(128) 评论(0) 推荐(0) 编辑
摘要: lca问题 1.树链剖分 2.tarjan算法 遍历一棵树,不断更新当前节点子节点的父亲。。。具体可看代码,不难 3.dfs+倍增 阅读全文
posted @ 2018-04-14 18:28 lnyzo 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 动态规划,挺经典的 两次取的序列一样,可以看成两个人分别玩一次,然后两个人得到的序列一样. f [ i ][ j ][ k ]表示已经用了 i 个球,,第一个人在上方取了j个,第二个人在上方取了k个的答案. 阅读全文
posted @ 2018-03-30 14:56 lnyzo 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 题目描述 Description 题目描述 Description 给你N个数,有两种操作:1:给区间[a,b]的所有数增加X2:询问区间[a,b]的数的和。 输入描述 Input Description 输入描述 Input Description 第一行一个正整数n,接下来n行n个整数, 再接下 阅读全文
posted @ 2018-03-14 21:09 lnyzo 阅读(274) 评论(0) 推荐(0) 编辑