摘要: 离线处理所有请求对于每一个点,求这个点到根的[a, b]的总和,即比b+1小的总和减去比a小的总和,因此对于每一个请求我们将其分为三个查询,分别为s的总和,t的总和,以及lca(s,t)的总和,容斥一下就可以得到s到t的总和,事先将这些点存储在一个数组里,dfs到这个点的时候我们用Treap动态维护 阅读全文
posted @ 2017-08-24 19:42 兰朵露可 阅读(175) 评论(0) 推荐(0)
摘要: 让你求(a[i] - b[(i + x) % n]) ^ 2的最大值,其中x从0到n-1。 因为结果总是sum(a[i] ^ 2) + sum(b[i] ^ 2) - sum(2 * a[i] * b[(i + x) % n])。 因此只需要找到最小的sum(2 * a[i] * b[(i + x) 阅读全文
posted @ 2017-08-21 19:44 兰朵露可 阅读(185) 评论(0) 推荐(0)
摘要: 把初始a的每一个元素对m次变换的贡献写出来,发现是一个斜着的杨辉三角,根据lucas,当且仅当a&b == b,C(a, b)为奇数,又因为&和^运算极快,4e10的复杂度也就跑了一秒。 #include <cstdio> #include <iostream> #include <algorith 阅读全文
posted @ 2017-08-16 17:36 兰朵露可 阅读(123) 评论(0) 推荐(0)
摘要: 统计对于每种颜色不含这种颜色的路的数量,用总数剪掉就行。 当我们走到一个节点时,在经历每个子节点时,sum都有一个增量,即离这个节点最近的相同颜色的子节点的子树大小,我们可以利用这个增量计算不包含这个颜色的路径的数量,同时也可以利用这个增量来更新sum。 #include <cstdio> #inc 阅读全文
posted @ 2017-08-14 19:06 兰朵露可 阅读(121) 评论(0) 推荐(0)
摘要: 裸的费用流 因为没有负环 因此可以建图 不需要跑最大流 所以在费用为正的时候return就行了 #include <cstdio> #include <cmath> #include <cstring> #include <iostream> #include <algorithm> #includ 阅读全文
posted @ 2017-08-14 16:17 兰朵露可 阅读(90) 评论(0) 推荐(0)
摘要: 二分mid size(l, r) / (r - l + 1) <= mid -> size(l, r) <= mid * (r - l + 1) -> size(l, r) + mid * l <= mid * (r + 1) 暴力枚举r线段树维护左边的式子 #include <cstdio> #i 阅读全文
posted @ 2017-08-14 15:50 兰朵露可 阅读(119) 评论(0) 推荐(0)
摘要: 思路来自 http://blog.csdn.net/u014258433/article/details/76223343 我是用滑动窗口实现的。 代码: 阅读全文
posted @ 2017-07-28 17:49 兰朵露可 阅读(351) 评论(0) 推荐(0)