摘要: 假设确定了最终所得向量的方向,则应该选择所有在该方向上投影为正的向量。按极角序排序后这显然是一段连续区间。最终向量方向很难枚举,但对于某个向量,在其上投影为正的向量与其夹角范围是(-π/2,π/2),所以只要枚举所有极角差不超过π的极长区间就可以了。这里的区间不是向量区间而是极角区间,相当于一条过原 阅读全文
posted @ 2018-12-06 22:00 Gloid 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 容易发现要么1和n直接相连,要么两点距离即为所有dx,1+dx,n的最小值。若为前者,需要满足所有|d1-dn|都相等,挂两棵菊花即可。若为后者,将所有满足dx,1+dx,n=d1,n的挂成一条链,其余点直接与链上点相连即可,相连点需要满足dx,1-dx,n=dy,1-dy,n。 阅读全文
posted @ 2018-12-06 20:46 Gloid 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 如果某个格子的积水量超过了该格子的某个挡板高度,那么挡板另一端的积水量就会与其相同。看起来是一个不断合并的过程,考虑并查集。枚举深度,维护每个连通块内的方案数,深度超过某挡板高度时,将两端的连通块合并,即方案数相乘。再加上该连通块均为当前深度的这种方案。这样复杂度即为O(nmHα)或O(n2m2α) 阅读全文
posted @ 2018-12-06 19:40 Gloid 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 考虑固定右端点,使左端点最小。那么按右端点排序后查询前缀这些区间的左端点第k小即可。然而写了一个treap一个线段树都T飞了,感觉惨爆。事实上可以用堆求第k小,维护一个大根堆保证堆中元素不超过k个即可,瞬间就跑的飞快了。 阅读全文
posted @ 2018-12-06 19:29 Gloid 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 二分答案后得到每个位置需要被加的次数。考虑贪心。从左到右考虑每个位置,将以该位置为左端点的区间按右端点从大到小加进堆。看该位置还需要被加多少次,如果不需要加了就不管,否则取堆顶区间将其选择,BIT实现区间覆盖。 阅读全文
posted @ 2018-12-06 13:10 Gloid 阅读(147) 评论(0) 推荐(0) 编辑