摘要: 假设所有操作都是对整个序列的。考虑每个子区间,区间和与其被加的值构成一次函数关系。最大子段和相当于多个子区间取最大值,答案显然就在这些一次函数构成的下凸壳上。如果预处理出凸壳,只要在凸壳上暴力跳就可以回答询问了,因为加的都是正数,并且斜率不同的一次函数数量是O(n)的。暴力建凸壳的复杂度是O(n2) 阅读全文
posted @ 2018-12-05 23:16 Gloid 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 在子树内和距离不超过k是一个二维限制,容易想到主席树,但主席树显然没法查最小值,因为不满足区间可减。kdtree和二维线段树可以干这事,但肯定会T飞。但事实上我们的问题有一个特殊性:对某个点x,查询其子树中的depth[x]~depth[x]+y和0~depth[x]+y这两种深度区间实际上是相同的 阅读全文
posted @ 2018-12-05 20:13 Gloid 阅读(334) 评论(0) 推荐(0) 编辑
摘要: 设si为该序列的异或前缀和,则显然相当于求Σmax{sj+sj^si} (i=1~n,j=0~i)。从高位到低位考虑,如果该位si为1,无论sj怎么填都是一样的;如果该位si为0,则sj该位应尽量为1。考虑对每个x预处理出满足si&x=x的最小i。这样贪心时就很好办了。这可以类似前缀和(或者说就是d 阅读全文
posted @ 2018-12-05 18:28 Gloid 阅读(195) 评论(0) 推荐(0) 编辑
摘要: A:签到。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long 阅读全文
posted @ 2018-12-05 12:34 Gloid 阅读(126) 评论(0) 推荐(0) 编辑