自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

无尽

The road ahead will be long. Our climb will be steep.

  • 博客(14)
  • 收藏
  • 关注

原创 UOJ 88 [集训队互测2015]Robot

线段树分治套凸包每个机器人在多次修改之间的贡献是不同的,因为这个一次函数被修改。显然要线段树分治。我们需要在线段树上维护凸壳,刚开始我以为要用动态凸包的那套理论。后来才知道直接在外面给所有一次函数排序,做凸壳就能是线性的了。。。我真智障#include<cstdio> #include<algorithm> #define N 500005 #define cmax(u,v) (u)<(v)?(u)

2016-12-31 22:47:46 725

原创 SPOJ 1812 LCS2

后缀自动机求多串的最长共子序列。可以用后缀数组+二分来搞。然而会T。后缀自动机可以做到线性时间。对任意一个串建后缀自动机,用别的串来跑。由于串的每一种不同的子串都唯一对应一个节点,因此用别的串跑的时候记录在匹配到这个节点表示的串(或者说是后缀)的最大长度。再维护最大值的最小即可。注意一个节点被更新则它的所有pre也可以被更新同时注意更新pre的时候l可以直接变为p->pre->len,因为p->pr

2016-12-30 22:23:00 365

原创 BZOJ 2565 最长双回文串

回文树正着反着做一遍回文树即可。然而好久没写回文树了,调了好一会儿。大概把一些细节讲一下。需要建两个根root1(len = -1)和root2(len = 0),其中root1的pre是自己,root2的pre是root1。找一个新节点np的pre时,要从p->pre开始找。因此如果p = root1则np的pre只能是root1,否则可以递归查找。#include<cstdio> #includ

2016-12-30 22:15:03 269

原创 BZOJ 4698 Sdoi2008 Sandy的卡片

二分+后缀数组先差分,然后找n个串的最长公共子串。 听说直接KMP O(n2m)O(n^2m) 可过,然而用后缀数组可以优化到 O(nmlogn)O(nmlogn) 做法是把所有串接起来,相邻两串之间用不同大数隔开,做SA。显然如果长度k能有公共子串,那么≤k肯定也可以。于是二分k,把所有连续的heigh值≥k的一段拎出来,看这一段是否包含了1~n的一些子串。有的话意味着存在这样的n个子串,否则不

2016-12-24 19:35:52 681 1

原创 BZOJ 4008 [HNOI2015]亚瑟王

期望DPPoPoQQQ大爷题解很神的DP。如果直接考虑每一轮用掉了什么东西,对下一轮产生了什么影响,那基本是做不出来的,因为这之间的关系很多很复杂。考虑所有轮一起做,记f[i][j]表示做到第i个物品时还有j轮没有选完。那么i此时可以在这j轮中被选,也可以不被选,就可以DP了。这种DP就可以避免物品与物品之间的影响了。#include<cstdio> #include<cstring> #defin

2016-12-24 12:18:23 370

原创 BZOJ 1076 [SCOI2008]奖励关

显然要记f[i][s]表示做到第k次,此时已有的物品集合为S的期望得分。下文前者指时间靠前的状态,后者指时间靠后的状态。如果正向DP,即f[i-1] -> f[i],会出问题。因为这样意味着第i次的决策可以根据第i次出现的不同物品来改变第i-1次的决策。即我们枚举第i次出现的物品,对i-1的不同s取max,就会后者决定前者。应当反向DP,即f[i+1] -> f[i]。也就是前者根据后者不同情况的不

2016-12-22 22:05:01 430

原创 BZOJ 2648 SJY摆棋子

kd-tree kd-tree不重构居然能过?23333。。。 就当屯一个模板吧。 #include #include #define N 1000005 #define cmin(u,v) (u)>(v)?(u)=(v):0 #define cmax(u,v) (u) using namespace std; namespace ziqian { int in() {

2016-12-18 15:18:04 429

原创 BZOJ 3881 [Coci2015]Divljak

AC自动机+fail树+树链求并+树状数组挺复杂的一道题。看到这题的第一反应是把S里的穿全都丢到AC自动机里,然后对于T中的每一个串在AC自动机上走,走到每一个节点时暴力往回跳fail来贡献答案所有。由于fail指针可能有很多,应该是可以卡到O(n^2)的,过不了吧。我们发现每一次贡献答案都是沿着fail边往上的,于是考虑用fail树来考虑。每一次一个节点贡献答案想到于该节点到根的路径全都贡献答案。

2016-12-17 18:13:48 1008

原创 BZOJ 3600 没有人的算术

线段树+替罪羊树黄学长博客里有VFK大爷的题解题意即给出一类嵌套结构的类似pair的“数”,定义它们之间的大小比较为递归比较first和second。(设first和second分别为数的括号里的左右两边)查区间max,可以考虑线段树,那么重点就是如何快速判断两个数的大小。暴力比较可以有30分。注意到后面有两个点的出现数字个数不超过1000,暗示我们可以直接处理出所有数对的大小关系,可以有50分。然

2016-12-10 15:51:55 588

原创 NOIP2016 提高组题解口胡

持续更新ing……蚯蚓容易想到一个暴力算法,直接用堆维护最大值,外面设一个变量来统计没被切掉的蚯蚓长度的增加值。入堆时元素减去这个值就可以维护了。复杂度是O(mlogm)O(mlogm) 的,无法接受。注意到一个性质,每一次切的蚯蚓的长度必然是单调不增的,这意味着每一次看下来的两段也是单调不增的。既然不增,就没必要用堆,用队即可维护。建两三个队分别维护初始蚯蚓序列,切掉后较长的一段,切掉后较短的一段

2016-12-10 00:40:08 360

原创 BZOJ 4538 [Hnoi2016]网络

线段树上二分+链交+LCA这题做法大概有2种,我用的是第二种1.实际上一条链的贡献是这条链在树上的补集,于是树剖线段树维护树,每一个节点开一个堆维护最大贡献。 O(nlog3n)O(nlog^3n)2.假设对于一个询问x,二分出一个答案C,若所有≥C的链都经过了x,则显然最终答案<C,否则最终答案≥C。于是离线将所有链按权排序后,建立权值线段树,节点存储子节点的链交,直接在线段树上二分找答案即可,O

2016-12-06 10:37:39 662

原创 BZOJ 1367 [Baltic2004]sequence

左偏树左偏树论文题。左偏树的优越性在于它可以不断找出树高最短的一段,因此能一直保持O(logn)的合并复杂度。对于这题,先转成不降序列来做,只需-i我们将序列先分成n段,则每一段的最优解z[i]=t[i],从左到右一段一段做,考虑合并。若z[i] <= t[i],不需要合并。去做下一段。若z[i] > t[i],易证(感性地想,或者去看论文)两段的最优解应当是两段所有数字的中位数。于是合并两段并改最

2016-12-03 16:58:25 289

原创 BZOJ 4137 [FJOI2015]火星商店问题

线段树套trie+可持久化trie or 分治分治的做法比较神,还没看,先讲讲数据结构。对于特殊商品,肯定是可持久化trie来搞。对于其他商品,对商店1~n建线段树,每个节点下建trie树,维护数字出现的最迟时间即可。然而我被卡内存了,在别的OJ上过了,就当能过吧。。。#include<cstdio> #define N 100005 #define ll long long using name

2016-12-03 13:44:11 843

原创 YZOJ 1572 [省队训练]calc

离线+分块思想挺神的题目啊。。。裸做肯定不行。因为询问可以变成前缀和加减,考虑将所有询问拆成两个点,按端点从左到右排序,一个一个做。暴力1:我们记mod[i][j]表示对i取模的值为j的数的个数的话,空间复杂度 O(p^2),时间复杂度 O(n*p+m),若p很大时,没戏。暴力2:记一个数值i出现的次数为cnt[i],然后枚举k,p+k,2p+k…来更新答案,空间复杂度O(Ai),时间复杂度O(m*

2016-12-03 00:38:05 927

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除