<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[没有听众的演讲]]></title><description><![CDATA[そんなことだけで 嬉しい 満たされてしまう]]></description><link>https://blog.youkuaiyun.com/Zhayan9QvQ</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Zhayan9QvQ]]></copyright><item><title><![CDATA[【Bzoj2588】Count on a tree]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/74531600</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/74531600</guid><author>Zhayan9QvQ</author><pubDate>Thu, 06 Jul 2017 11:51:50 +0800</pubDate><description><![CDATA[题意伟大的树上权值第k小。解析在树上建立主席树，每个点的前驱不再是它的前一个点，而是它的父亲结点。我们可以这样来想，序列上的主席树类似于前缀和，用的时候直接序列上差分。而树上也就可以把每个点保存为到根的主席树，查询的时候也类比树上的差分就可以了。记得是Query(rt[x],rt[y]….)。#include <cstdio>
#include <algorithm>#define Rep( i ,]]></description><category></category></item><item><title><![CDATA[【Bzoj3732】Network]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/74078644</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/74078644</guid><author>Zhayan9QvQ</author><pubDate>Sat, 01 Jul 2017 19:11:39 +0800</pubDate><description><![CDATA[题意给你N个点的无向图 (1 <= N <= 15,000)，记为：1…N。  
图中有M条边 (1 <= M <= 30,000) ，第j条边的长度为： d_j ( 1 < = d_j < = 1,000,000,000).现在有 K个询问 (1 < = K < = 20,000)。  
每个询问的格式是：A B，表示询问从A点走到B点的所有路径中，最长的边最小值是多少？解析类似于那啥货车运输，嗯]]></description><category></category></item><item><title><![CDATA[【Bzoj4353】play with tree]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/74066934</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/74066934</guid><author>Zhayan9QvQ</author><pubDate>Sat, 01 Jul 2017 16:15:30 +0800</pubDate><description><![CDATA[题意给你一棵包含N个节点的树，设每条边一开始的边权为0，现在有两种操作： 
1）给出参数U,V,C，表示把U与V之间的路径上的边权变成C（保证C≥0） 
2）给出参数U,V,C，表示把U与V之间的路径上的边权加上C。但是如果U至V之间路径某条边的边权加上C小于0，那么C=这条边的边权的相反数。 
你需要统计出每次一操作过后树中边权为0的边有多少条。解析边权树链剖分。对于操作1直接修改，对于操作2，先]]></description><category></category></item><item><title><![CDATA[【Bzoj4336】骑士的旅行]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/73695361</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/73695361</guid><author>Zhayan9QvQ</author><pubDate>Sat, 24 Jun 2017 22:40:19 +0800</pubDate><description><![CDATA[题意给一棵树，每个结点上可能有多个权值，可以每次改变某权值的值或者位置，多次询问一条路径上的前k大值。解析对于每个结点维护一个multiset，因为k很小，所以每次可以把两结点暴力合并，这样就只要把两个队列合并就可以了。#include <set>
#include <cstdio>
#include <algorithm>#define Rep( i , _begin , _end ) for(i]]></description><category></category></item><item><title><![CDATA[【Bzoj4448】情报传递]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/73518824</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/73518824</guid><author>Zhayan9QvQ</author><pubDate>Tue, 20 Jun 2017 20:40:08 +0800</pubDate><description><![CDATA[题意给一棵树和m个操作(持续m秒)，操作如下 
1.给一个点打上标记，被标记的点每秒加1危险度，(被标记时仍为0，后一秒为1)。 
2.查询x,y的路径上有多少危险度大于k的点。解析这种每秒增加的标记显然是不好维护的。 
考虑转化。 
设某点在t时刻被标记，i时刻提出询问，那么此时它的危险度为i-t。 
则有i-t>k,t#include <cstdio>
#include <algorithm>#]]></description><category></category></item><item><title><![CDATA[【Bzoj1901】Dynamic Ranking]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/73294813</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/73294813</guid><author>Zhayan9QvQ</author><pubDate>Thu, 15 Jun 2017 18:00:02 +0800</pubDate><description><![CDATA[题意给一个序列，每次询问[l,r]区间内第k小的数字。带修改。解析同2B平衡树的操作。 
操作少可以打得简单一点。#include <cstdio>
#include <algorithm>#define Rep( i , _begin , _end ) for(int i=(_begin),i##_END=(_end);i<=(i##_END);i++)
#define For( i , _beg]]></description><category></category></item><item><title><![CDATA[【Bzoj2141】排队]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/73294773</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/73294773</guid><author>Zhayan9QvQ</author><pubDate>Thu, 15 Jun 2017 17:54:52 +0800</pubDate><description><![CDATA[题意给一个序列，每次可以交换其中的两个数，每次交换后输出逆序对的数量。解析每次交换考虑x,y之间的数字(x之前,y之后的数字是没有影响的) 
那么增加的数字是小于a[y],大于a[x]的那些。 
减小的是小于a[x],大于a[y]的。 
区间查rank显然可以树套树解决。 
然后注意一些特判。#include <cstdio>
#include <algorithm>#define Rep( i ,]]></description><category></category></item><item><title><![CDATA[【Bzoj3196】2B平衡树]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/73252616</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/73252616</guid><author>Zhayan9QvQ</author><pubDate>Wed, 14 Jun 2017 21:41:52 +0800</pubDate><description><![CDATA[题意您需要写一种数据结构（可参考题目标题），来维护一个有序数列，其中需要提供以下操作： 
1.查询k在区间内的排名 
2.查询区间内排名为k的值 
3.修改某一位值上的数值 
4.查询k在区间内的前驱(前驱定义为小于x，且最大的数) 
5.查询k在区间内的后继(后继定义为大于x，且最小的数)解析唔…看到这个标题 
啊啊啊是你吗2B小姐姐！！ 
好了不发神经这是个灰常普通的树套树模板，一般会用线段树套]]></description><category></category></item><item><title><![CDATA[【Bzoj1303】中位数图]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72974406</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72974406</guid><author>Zhayan9QvQ</author><pubDate>Sat, 10 Jun 2017 08:39:37 +0800</pubDate><description><![CDATA[题意给出1~n的一个排列，统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后，位于中间的数。解析因为数都是不重复的，所以可以把左边小于它的记为+1，大于的记为-1，统计前缀和f。同理，右边大于的记为1，小于的记为-1，统计前缀和g，那么，如果左边某个数出现某次数的方法种数等于右边的，就根据乘法原理统计答案，特别地，f[0]=g[0]=1。数组下标要做一点处理。#]]></description><category></category></item><item><title><![CDATA[数据结构小题]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72974336</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72974336</guid><author>Zhayan9QvQ</author><pubDate>Sat, 10 Jun 2017 07:40:42 +0800</pubDate><description><![CDATA[题意给定一个n*m的方格地区，有以下两种操作。 
1 x y 从坐标(x,y)的位置向四个方向释放无限长的红雾。 
2 x1 y1 x2 y2 询问左上点为(x1,y1)，右下点为(x2,y2)的矩形范围内，被红雾遮盖的地区的数量。 
注意：释放红雾时脚下没有。 
　　　两块红雾会抵消对于100%的数据，1<=n,m,q<=100000解析我们可以在横轴和纵轴上分别建立树状数组，(加一，加第二次的话]]></description><category></category></item><item><title><![CDATA[【Bzoj4027】兔子与樱花]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72667764</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72667764</guid><author>Zhayan9QvQ</author><pubDate>Tue, 23 May 2017 22:03:10 +0800</pubDate><description><![CDATA[题意给一个n个结点的树，每个结点有最大载重m，上面有c[i]朵花，对于每个结点，它的儿子个数和花的朵数不能超过m。现在可以删掉一些结点，每删掉一个，它的花就会给父亲，求最多能删掉多少结点。解析树形Dp+贪心。 
可以直接Dfs递归实现。 
显然从权值小的开始删起。#include <cstdio>
#include <vector>
#include <algorithm>#define Rep(]]></description><category></category></item><item><title><![CDATA[【Bzoj3522】Hotel]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72667711</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72667711</guid><author>Zhayan9QvQ</author><pubDate>Tue, 23 May 2017 21:57:01 +0800</pubDate><description><![CDATA[题意有一个树形结构，每条边的长度相同，任意两个节点可以相互到达。选3个点。两两距离相等。有多少种方案？解析满足条件的点对一定是“有一个中心点，三个点到中心点的距离相等，且三个点分别在不同子树中”这种情况。(因为如果在同一子树中会被重复统计)。 
那么枚举中心点，然后遍历子树，统计答案。 
令cnt[i]表示当前子树中深度为i的点有多少个。 
f[i]表示当前点已经遍历过的子树中，深度为i的点有多少个]]></description><category></category></item><item><title><![CDATA[没有上司的舞会]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72667652</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72667652</guid><author>Zhayan9QvQ</author><pubDate>Tue, 23 May 2017 21:48:30 +0800</pubDate><description><![CDATA[题意某大学有N个职员，编号为1~N。他们之间有从属关系，也就是说他们的关系就像一棵以校长为根的树，父结点就是子结点的直接上司。现在有个周年庆宴会，宴会每邀请来一个职员都会增加一定的快乐指数Ri，但是呢，如果某个职员的上司来参加舞会了，那么这个职员就无论如何也不肯来参加舞会了。所以，请你编程计算，邀请哪些职员可以使快乐指数最大，求最大的快乐指数。解析经典题，dp[i][0]表示不选i时能取得的最大利益]]></description><category></category></item><item><title><![CDATA[【Bzoj1060】时态同步]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72667619</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72667619</guid><author>Zhayan9QvQ</author><pubDate>Tue, 23 May 2017 21:45:50 +0800</pubDate><description><![CDATA[题意给你一个n个结点的树。每条边上有一个权值，你可以给边加上权值，求最少要加上多少权值才能使根结点到每个叶子结点的权值相同。解析Dfs即可，每个结点的子结点都要加上其与最大子结点的差值。#include <cstdio>
#include <cstring>
#include <algorithm>#define Rep( i , _begin , _end ) for(int i=(_begin)]]></description><category></category></item><item><title><![CDATA[奇怪的题目]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72577334</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/72577334</guid><author>Zhayan9QvQ</author><pubDate>Sat, 20 May 2017 15:06:53 +0800</pubDate><description><![CDATA[没有题面。现在需要你写一种数据结构，支持以下两种操作。 
1. 给出 L R K D，代表给你一个长度等于R-L+1的等差数列，首项为K，公差为D，并将它对应加到a[L]~a[R]的每一个数上。即：令a[L]=a[L]+K，a[L+1]=a[L+1]+K+D。 
2. 给出 L R X，我们设a[R] - a[L]的值为tmp。对于给定的整数x，需要你判断tmptmptmp^{tmp} 的位数是否达]]></description><category></category></item><item><title><![CDATA[【Bzoj4653】区间]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/71056264</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/71056264</guid><author>Zhayan9QvQ</author><pubDate>Mon, 01 May 2017 15:36:33 +0800</pubDate><description><![CDATA[题意在数轴上有 n个闭区间 [l1,r1],[l2,r2],…,[ln,rn]。现在要从中选出 m 个区间，使得这 m个区间共同包含至少一个位置。对于一个合法的选取方案，它的花费为被选中的最长区间长度减去被选中的最短区间长度。区间 [li,ri] 的长度定义为 ri−li，即等于它的右端点的值减去左端点的值。求所有合法方案中最小的花费。如果不存在合法的方案，输出 −1。解析我们用一棵线段树来保存点的]]></description><category></category></item><item><title><![CDATA[【Bzoj1029】建筑抢修]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/71056203</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/71056203</guid><author>Zhayan9QvQ</author><pubDate>Mon, 01 May 2017 15:26:24 +0800</pubDate><description><![CDATA[题意给出n个需要抢修的建筑，每个建筑抢修需要t1时间，并且要在t2之前完成抢修，问在时间S内能抢修的建筑最多有多少个。解析贪心，首先按t2排序，能修则修。然后不能的话每当有建筑时判断，如果这个建筑需要用时比之前的短，就替换。#include <queue>
#include <cstdio>
#include <algorithm>#define Rep( i , _begin , _end ) f]]></description><category></category></item><item><title><![CDATA[【Bzoj3668】起床困难综合症]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/70490430</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/70490430</guid><author>Zhayan9QvQ</author><pubDate>Mon, 01 May 2017 14:52:23 +0800</pubDate><description><![CDATA[题意给你n个操作包括按位与，按位或，按位异或。还有一个参数m，请你找0~m中的经过n个操作后最大的数，输出这个最大值。分析首先二进制运算的每一位是相对独立的，可以考虑它的每一位。首先，如果某位经过n次操作能变成1，这一位就要选(如果能选0就选0，使数字尽量小)。如果无论1,0都无法变成1，也选0。(在这一位上填1产生的贡献比在它后面全填上1还要大。能填则填。)#include <cstdio>
#i]]></description><category></category></item><item><title><![CDATA[单调栈模板题]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/70340043</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/70340043</guid><author>Zhayan9QvQ</author><pubDate>Fri, 21 Apr 2017 22:24:49 +0800</pubDate><description><![CDATA[题意N个人正在排队进入一个音乐会。人们等得很无聊，于是他们开始转来转去，想在队伍里寻找自己的熟人。队列中任意两个人A和B，如果他们是相邻或他们之间没有人比A或B高，那么他们是可以互相看得见的。写一个程序计算出有多少对人可以互相看见。解析维护一个不升的序列(单调栈…？)#include <cstdio>
#include <algorithm>#define Rep( i , _begin , _en]]></description><category></category></item><item><title><![CDATA[树状数组求逆序对]]></title><link>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/70338660</link><guid>https://blog.youkuaiyun.com/Zhayan9QvQ/article/details/70338660</guid><author>Zhayan9QvQ</author><pubDate>Fri, 21 Apr 2017 20:32:04 +0800</pubDate><description><![CDATA[…话说这不应该是学语言的时候学的嘛…#include <cstdio>
#include <algorithm>#define Rep( i , _begin , _end ) for(int i=(_begin);i<=(_end);i++)
#define For( i , _begin , _end ) for(int i=(_begin);i!=(_end);i++)
#define Lop]]></description><category></category></item></channel></rss>