@SovietPower
2018-09-06T19:34:11.000000Z
字数 4370
阅读 1500
正睿OI
有一段山脉为n个点的折线,第i个点在i位置,高。两个点不可见当且仅当其间存在一个点严格高于两点连线。求最多的互相不能看见的点。
。
区间最高点左右的点是独立的,以它作为分治中间点枚举选与不选?
给定一个长为的序列,求所有区间最大值乘以最小值的和。
。
数据随机:每次选最小值作为分治中心,期望深度。对每个位置找左右第一个比它大的位置。
数据不随机:选中间点分治。如果固定,维护中间点到的区间最大值和最小值。假设在左侧,该区间过中点。。忘了,反正区间的贡献为。维护的前缀和。
动态最大全1正方形:的01点阵,个操作,每次操作把某个位置变为0,然后求最大全1子正方形。
。
DP没法处理修改。
非DP的话,每次分治长边,(暴力)求出分治边上所有点向上下/左右都是1能延伸的最长距离。然后扫一遍就可以知道过分支边的答案。继续分下去。复杂度。
每次修改,分治递归找到要修改的位置,顺便更新影响的点的最长延伸距离以及扫一遍更新答案。每次修改复杂度。
给定的带边权网格图。次询问从点到点的最短路。
.
对分治线上的每个点进行一次Dijkstra。若该区域点数(面积)为S,则分治线如果选择较短的一边,其上点的个数。每次选较短的分治复杂度,若不这样复杂度。(?网上题解有证明。)
若一次询问的在分治线两侧,则可以枚举分治线上的点用更新答案,然后删掉这个询问;若在分治线同侧,则也用更新一次过分治线的答案,继续分治。
给一棵N个点无权树,求长度为质数的路径数目。
。
点分治。枚举子树很容易被卡成,直接算整个连通块的,减去子树内部的。
记为该点所有子树长为的路径总数,即,则过该点长度为的路径条数:。
这是个卷积形式,FFT优化。
一棵树,每个点有点权1/-1。求有多少条路径,满足点权和为0,且存在一个中间点,满足到的两条路径点权和为0。中间点不同则路径也算作不同。
...
本题可以考虑树的点分治。问题就变成求过根满足条件的路径数。路径上的休息站一定是在起点到根的路径上,或者根到终点的路径上。
如何判断一条从根出发的路径是否包含休息站?只要在dfs中记录下这条路径的和x,同时用个标志数组判断这条路径是否存在前缀和为x的节点。
这样我们枚举根节点的每个子树。用,分别表示前面几个子树以及当前子树和为i的路径数目,0和1用于区分路径上是否存在前缀和为i的节点。那么当前子树的贡献就是,其中i的范围,为当前子树的深度。
一棵树,每个点有一个权值,求多少点对满足,每次加点,强制在线。
。
求有多少条路径,满足。
建点分树。因为多次加点后复杂度可能很不对,要类似替罪羊树一样重构。
给一棵二叉树,求包含根节点的大小为的联通块个数?对取模。
...
在DFS序上DP。表示DFS序的前i个选择j个的和。若选,则;若不选,则要跳过这棵子树,。
树链剖分,二叉树
所有轻边子树size和,因为每个点最多属于条轻边。
M个操作,在末尾插入/删除向量,询问区间内与某个向量叉积最大的向量。
。
处理过当前分治中心的询问。
最大的向量在凸包上,凸包具有可加性,只要求根节点...。Treap/Splay维护,每次加一个点,二分一下要删哪些点。
定义为从号点出发,严格不经过号点,最终到达号点的最短路径长度。如果不存在这样的路径,的值为-1。计算每个。
。
暴力:,枚举删掉某个点Floyd。
Floyd本质是枚举中间点进行更新,与枚举顺序无关。表示求解时的情况。递归左区间时就把中所有点作为中间点枚举更新一遍dis,递归右区间时把dis复原,然后把中所有点作为中间点枚举更新一遍dis。时枚举一下就可以得到时的答案。。
有个物品,每个物品的重量是,价值是。每个物品只能取一个。
给定个询问,每个询问由两个数组成。
表示:给定最大容量为X的背包,使用除了第i件物品以外的所有物品,能够得到的最大价值之和。
。
同上题一样的分治。
维护DP方程。
。
,一定在凸包上,维护凸包二分可以在线做。
CDQ,对于每个询问在前面区间的凸包上二分,。
对于询问按斜率排序,单调,。
拆询问,CDQ。
给一个长度为N的向量序列,有M个询问每次询问一个区间内和一个向量v点积最大的向量。
。
...
把区间拆成若干个区间,取。
建线段树,存区间所有向量,对区间求一个凸包。对每个区间在其凸包上二分。。
建树:区间可由两个儿子归并得到,建凸包就是的。
Solve:对每个询问先按斜率排序,答案单调,。把线段树区间改成?基数排序?...
个盒子,第个盒子里有个气球,个孩子每个孩子有自己的区间,如果一个孩子自己的区间内所有气球都被踩爆了他就会很高兴。个操作,每次选一个盒子踩一个气球并询问有多少个孩子高兴。
。
建线段树,将每个孩子的区间放到线段树上。对每个节点设变量。
每个孩子相当于对节点打一个。的总个数是的,所以均摊也是的。
插入边删除边询问两个点连通性,可以离线,N个点M个操作。
。
每条边存在的时间是一段区间,建一棵时间线段树。某一个时刻存在的所有边就是其到根节点路径的并。
按时间建线段树,对每条边维护其出现时间,即将时间在线段树上分成若干区间。询问就在线段树的某叶子节点上。
对整棵树DFS,当进入一个节点时,将这个点代表的这段区间中出现的边全部合并起来,离开这个点时撤销。
可以用不路径压缩、按秩合并的并查集维护连通性。合并时用栈记录合并前状态,合并前的父节点用x or fa[x]都行,因为合并的是集合根节点。。
如果秩改变也要加入栈。
序列上:选段不相交的区间,使其权值和最大。
证明答案是凸的:网络流是凸的,这题可以用网络流做:模拟费用流。所以答案是凸的,即Ans_{i}-Ans{i-1}\geq Ans_{i+1}-Ans_i。
树剖,O(n\log^2n)。
带权二分+DP。