<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Chester King]]></title><description><![CDATA[蒟蒻成长中……]]></description><link>https://blog.youkuaiyun.com/lyfsb</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lyfsb]]></copyright><item><title><![CDATA[【BZOJ】3925 [Zjoi2015]地震后的幻想乡 状压+期望DP||定积分]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/82973616</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/82973616</guid><author>lyfsb</author><pubDate>Mon, 08 Oct 2018 20:55:59 +0800</pubDate><description><![CDATA[题目传送门
这题是真的神仙题……整整花了我两个礼拜来理解这题
首先这题据我了解有三种做法：纯OI做法、积分+数学推导、直接积分
请做好一定的心理准备，接下来的东西可能有点难理解~~（好像不是一点点的难吧……）~~

1.纯OI做法
首先我们根据期望的线性性，可以得到ans=∑x=0mw(x)×p(x)ans=\sum_{x=0}^mw(x)\times p(x)ans=∑x=0m​w(x)×p(x...]]></description><category></category></item><item><title><![CDATA[记一次突击检测]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/80636625</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/80636625</guid><author>lyfsb</author><pubDate>Sat, 09 Jun 2018 21:43:29 +0800</pubDate><description><![CDATA[Typora的稳定性令人堪忧啊——把我刚写好的blog给吞了……wqnmlgb

假装重新写一次

今天本来是比较平淡的一天，甚至还有些烦闷——毕竟快期末考了，各种试卷和作业，我也就呵呵了

晚上还是在机房，结果创新班的同学们都没来，我怕不是要被班主任D死了

本来想一个人静静地学一些算法和姿势的，但是心始终静不下来，开黑打比赛的学弟们太吵了，一群嘤嘤怪

于是就想起来走走，换换脑子，然后就被学弟...]]></description><category></category></item><item><title><![CDATA[失踪人口]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/80611558</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/80611558</guid><author>lyfsb</author><pubDate>Thu, 07 Jun 2018 16:38:35 +0800</pubDate><description><![CDATA[终于有了去年学长们的体验：文化课和竞赛的抉择 
高一下这个学期感觉过得浑浑噩噩的，整天颓废，不知道自己的路在哪里 
人的精力终究是有限的，一天六七张试卷也不是开玩笑的 
接下来还有市统测和学考，失踪人口既定于七月初回归...]]></description><category></category></item><item><title><![CDATA[【BZOJ】4504 K个串 主席树+堆]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/79079356</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/79079356</guid><author>lyfsb</author><pubDate>Tue, 16 Jan 2018 21:21:22 +0800</pubDate><description><![CDATA[题目传送门

一个晚上就做了这么一道题……好颓啊……

首先我们可以对于每个aia_i维护一个pre[ai]pre[a_i]表示在它之前与他最近的相同的数的位置。

然后对于每个aia_i，在(pre[ai],i)(pre[a_i],i)这个范围内都加上aia_i，可以用主席树。

题目要求kk个区间不相同，这就是“超级钢琴”的模型，套上超级钢琴的套路就行了。

附上AC代码：



#inclu]]></description><category></category></item><item><title><![CDATA[【BZOJ】3993 [SDOI2015]星际战争 二分+网络流]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/79068802</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/79068802</guid><author>lyfsb</author><pubDate>Mon, 15 Jan 2018 21:08:45 +0800</pubDate><description><![CDATA[题目传送门

网络流的用法又涨姿势了——网络流可以用于判断答案的可行性。

这题我们首先考虑建图：


第ii个机器人向超级汇点连一条流量为aia_i的边。
超级源点向第ii个武器连一条流量为??的边。（??表示流量暂时未定）
如果第ii个武器可以打到第jj个机器人，就连一条流量为+∞+\infty的边。


然后考虑二分一个时间midmid作为答案，这时考虑第2条建图，这时的??就等于bi×mi]]></description><category></category></item><item><title><![CDATA[【HDU】4787 GRE Words Revenge 二进制分组+AC自动机]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/79068798</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/79068798</guid><author>lyfsb</author><pubDate>Mon, 15 Jan 2018 21:08:09 +0800</pubDate><description><![CDATA[题目传送门

orz Manchery

多次询问可以按时间分治，但可惜这题强制在线。

因而引入了二进制分组，就是把当前字符串的数量二进制拆分。

比如说当前有10个字符串，就把这10个字符串分成一组8个和一组2个。

这样每个字符串最多被重构AC自动机log2n\log_2n，一种优美的暴力

二进制分组适用于那些不支持修改的数据结构，AC自动机算一例，凸包也是。

附上AC代码：



#i]]></description><category></category></item><item><title><![CDATA[【BZOJ】2124 等差子序列 线段树+hash]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/79048222</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/79048222</guid><author>lyfsb</author><pubDate>Fri, 12 Jan 2018 21:15:31 +0800</pubDate><description><![CDATA[题目传送门

等等……这题好像在哪里做过……

哦，Codeforces 452F，原题哈……

为什么我还是不会做啊……

就当是复习一遍吧，这种想法还是挺好的。

p.s.WA了两发，错在了updata上……好像updata这个地方好容易出错啊。

附上AC代码：



#include 
#include 
#include 
using namespace std;

typedef un]]></description><category></category></item><item><title><![CDATA[【51nod】1486 大大走格子 DP+组合数学]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/79048215</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/79048215</guid><author>lyfsb</author><pubDate>Fri, 12 Jan 2018 21:14:22 +0800</pubDate><description><![CDATA[题目传送门

很久以前就考过的题目了……但是为什么我一直都不会……

考虑两个障碍物之间的转移，方案数就是Cx2−x1x2−x1+y2−y1C^{x2-x1}_{x2-x1+y2-y1}。

把起点和终点加到障碍物里一起转移，先按坐标升序排序。

然后定义f[i]f[i]表示前ii个障碍物只经过第ii个的方案数，f[i]=Cxi−1xi+yi−2+∑jij=1f[j]×Cxi−xjxi−xj+yi]]></description><category></category></item><item><title><![CDATA[【51nod】1407 与与与与 DP+容斥]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/79048079</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/79048079</guid><author>lyfsb</author><pubDate>Fri, 12 Jan 2018 20:55:17 +0800</pubDate><description><![CDATA[题目传送门

好难懂的一道题啊……%%%sillyf

先把题目转化一下，答案就等于所有组合-and值不为零的组合。

定义f[x]f[x]为ai&x==xa_i\&x==x的aia_i的个数，g[x]g[x]为xx转化为二进制后1的个数。f[x]f[x]的求解方法见上一篇blog。

容斥一下求and不为零的组合情况： 
ans=∑x=11000000(−1)g[x]−1×(2f[x]−1)
a]]></description><category></category></item><item><title><![CDATA[【51nod】1406 与查询 DP]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/79048072</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/79048072</guid><author>lyfsb</author><pubDate>Fri, 12 Jan 2018 20:54:45 +0800</pubDate><description><![CDATA[题目传送门

考虑一个数num&x==xnum\&x==x，说明xx在二进制下为1的位置上numnum也为1。

定义f[x]f[x]为ai&x==xa_i\&x==x的aia_i的个数。

如果y&x==xy\&x==x，即yy是xx的一个子集，那么f[y]f[y]一定对f[x]f[x]产生贡献。

这样就可以枚举子集转移了，但是可能会有重复计算，于是从高位向低位转移。

p.s.输入输出数据量]]></description><category></category></item><item><title><![CDATA[【BZOJ】3506 [Cerc2007]robotic sort Splay]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/79032564</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/79032564</guid><author>lyfsb</author><pubDate>Thu, 11 Jan 2018 11:55:26 +0800</pubDate><description><![CDATA[题目传送门

这好像是两天前的题目了……一直都忘记写blog了……

其实这题就是一道序列翻转+求区间最小值的位置，直接splay维护序列就行了。

p.s.这是一道双倍经验题，不过3506那题的题目描述极为险恶……（见oj1552）……

附上AC代码：

#include 
#include 
#include 
using namespace std;

const int N=1e5+10]]></description><category></category></item><item><title><![CDATA[【BZOJ】3669 [Noi2014]魔法森林 kruskal+LCT]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/79016248</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/79016248</guid><author>lyfsb</author><pubDate>Tue, 09 Jan 2018 18:58:01 +0800</pubDate><description><![CDATA[题目传送门

一句话题意：求一条路径，使得max(ai)+max(bi)max(a_i)+max(b_i)最小。输出这个最小值。

还是ZZK最强了，一眼就秒掉了这道题。

首先我们把所有的边按aia_i排序，从前往后加入边，显然当前的边是最大的aia_i，我们只需要用LCT维护一个从1到n路径上的max(bi)max(b_i)就行了。

不过LCT好像没法处理边权，那么我们可以换一种建LCT的方]]></description><category></category></item><item><title><![CDATA[【BZOJ】2843 极地旅行社 LCT]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/79007098</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/79007098</guid><author>lyfsb</author><pubDate>Mon, 08 Jan 2018 20:51:42 +0800</pubDate><description><![CDATA[题目传送门

这题啊，又是一道LCT的裸题，大致上和洛谷的模板差不多吧，直接切掉就好了。

附上AC代码：



#include 
#include 
#include 
using namespace std;

const int N=2e5+10;
int n,a[N],m,ch[N][2],f[N],mk[N],sz[N],o,x,y;

inline char nc(void){]]></description><category></category></item><item><title><![CDATA[【BZOJ】2002 [Hnoi2010]Bounce 弹飞绵羊 LCT]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/78997098</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/78997098</guid><author>lyfsb</author><pubDate>Sun, 07 Jan 2018 20:21:04 +0800</pubDate><description><![CDATA[题目传送门

这题的想法挺好的。至少我想不到。

考虑每个点向它弹到的点连边，如果在当前点被弹飞，就和n+1n+1号点连边。

然后发现这样的建图形成了一棵树，修改操作可以看成删边+加边。

一个节点的答案就是该节点到n+1n+1号节点的路径长度-1。

附上AC代码：

#include 
#include 
#include 
using namespace std;

const int N]]></description><category></category></item><item><title><![CDATA[【洛谷】3690 【模板】Link Cut Tree （动态树）]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/78997095</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/78997095</guid><author>lyfsb</author><pubDate>Sun, 07 Jan 2018 20:20:43 +0800</pubDate><description><![CDATA[题目传送门

一道迟到的模板题。话说在思路清晰的时候敲代码真的爽啊。

修改操作可以先访问该节点，然后把它旋转到根，这样只用修改这一个点的权值就好了。

询问操作可以把其中一个节点搞成根，然后两点间的权值就变成了另一个节点到根的权值了。

这两个想法挺妙。

附上AC代码：



#include 
#include 
#include 
using namespace std;

const i]]></description><category></category></item><item><title><![CDATA[【BZOJ】2049 [Sdoi2008]Cave 洞穴勘测 LCT]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/78995239</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/78995239</guid><author>lyfsb</author><pubDate>Sun, 07 Jan 2018 15:49:48 +0800</pubDate><description><![CDATA[题目传送门

好吧，有些时候不能盲目地相信板子——LCT的splay和普通的splay有区别的……

我就是因为直接copy板子而一直TLE，还不知道哪里错……

直接给出ZZK的blog，还是ZZK最强啦！！！

总之LCT的最核心的操作就是access，把一棵树分成很多实链，每条实链对应一棵splay，然后处理两个点之间的关系（连接与断开）就变成了splay的操作。

至于时间复杂度，好像也是]]></description><category></category></item><item><title><![CDATA[【BZOJ】1007 [HNOI2008]水平可见直线 半平面交(单调栈)]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/78984670</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/78984670</guid><author>lyfsb</author><pubDate>Fri, 05 Jan 2018 19:51:37 +0800</pubDate><description><![CDATA[题目传送门

半平面交这个名字好可怕啊……但是其实就是一个单调栈。

我们把所有的一次函数按斜率降序排序，设ii为当前函数的编号，sk[]sk[]为单调栈，toptop为栈顶指针。定义calc(x,y)calc(x,y)函数为计算两个一次函数的交点的横坐标。

如果calc(i,sk[top])>=calc(sk[top],sk[top−1])calc(i,sk[top])>=calc(sk[to]]></description><category></category></item><item><title><![CDATA[【BZOJ】3196 Tyvj 1730 二逼平衡树 线段树+平衡树]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/78965306</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/78965306</guid><author>lyfsb</author><pubDate>Wed, 03 Jan 2018 20:44:18 +0800</pubDate><description><![CDATA[题目传送门这题除了烦一点，其实也没什么大不了的嘛……就是外层一棵区间线段树，内层套上splay，除了第二个操作需要套一个二分，时间复杂度为O(log32n)O(\log_2^3n)，其他的操作的时间复杂度都是O(log22n)O(\log_2^2n)。主要是细心吧，耐心一点写都能过的吧。p.s.话说内存不够导致TLE什么的好鬼啊……还是ZZK大佬最强了，一眼就看出了问题。附上AC代码：#includ]]></description><category></category></item><item><title><![CDATA[【BZOJ】3932 [CQOI2015]任务查询系统 主席树+差分]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/78965301</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/78965301</guid><author>lyfsb</author><pubDate>Wed, 03 Jan 2018 20:43:38 +0800</pubDate><description><![CDATA[题目传送门这题嘛，就是主席树吧，把一个任务拆成两部分：任务开始的加入操作和任务结束的删除操作。（好像这就是差分了吧）然后如果两个操作在同一个时间点上发生，就直接对当前时间节点的树根进行修改；否则就在两个操作时间点之间的时间点上覆盖为前一个操作时间点的主席树根。（话说一开始我还不知道为什么要有这个覆盖的……智商已下线）然后就是一些普通的主席树操作了吧，直接写掉就行了。附上AC代码：#include <]]></description><category></category></item><item><title><![CDATA[【Codeforces】600E Lomsat gelral (dsu on tree)]]></title><link>https://blog.youkuaiyun.com/lyfsb/article/details/78955901</link><guid>https://blog.youkuaiyun.com/lyfsb/article/details/78955901</guid><author>lyfsb</author><pubDate>Tue, 02 Jan 2018 21:13:59 +0800</pubDate><description><![CDATA[题目传送门优美的暴力什么的太暴力了吧……首先我们证明一下dsu on tree的复杂度，我们挑出一个节点的重儿子，就是树剖里的重儿子，把所有的轻儿子的信息加入到重儿子里，每次的树的大小至少翻倍，所以时间复杂度为O(nlog2n)O(n\log_2n)。dsu on tree也有一定的局限性：1.只能支持子树查询；2.不支持修改修改。个人感觉dsu on tree就是处理树上的轻重儿子关系吧，就是在轻]]></description><category></category></item></channel></rss>