上一页 1 2 3 4 5 6 7 8 9 ··· 70 下一页
摘要: 恶补了动态点分治。。 阅读全文
posted @ 2019-09-17 19:57 NotNight 阅读(134) 评论(0) 推荐(0) 编辑
摘要: HDU 5737 很明显能发现数据是随机的。 我们用set去维护值一样的段, 因为随机所以set里面线段的大小减少得很快, 平均大概30个左右。 每次查询暴力处理每一段相同的在主席树上查找累加答案就可以了。 但是这个好像不是标算, 标算复杂度(n + m) * log(n) 并且数据不是随机也可以。 阅读全文
posted @ 2019-09-13 19:51 NotNight 阅读(204) 评论(0) 推荐(0) 编辑
摘要: HDU - 5741 我们枚举段的起点和终点, 那么每一种情况0的范围是[lx, rx], 1的出现范围是[ly, ry], 可以在二维平面上用矩形表示。 然后问题就变成了询问点有没有被至少一个矩形覆盖, 扫描线 + 树状数组就可以了。 阅读全文
posted @ 2019-09-13 16:55 NotNight 阅读(182) 评论(0) 推荐(0) 编辑
摘要: HDU - 5735 感觉这个思路相当巧妙啊。。 考虑最普通的 dp[ i ] = max(dp[ j ] + w[ i ] opt w[ j ]), j 是 i 的祖先。 把(2 << 16) 分成前八位和后八位去优化最朴素的dp。 修改遍历后八位, 查询遍历前八位。 阅读全文
posted @ 2019-09-13 15:53 NotNight 阅读(140) 评论(0) 推荐(0) 编辑
摘要: HDU - 5770 没想出来, 感觉不应该啊, 没有想到转换成二维上的点的问题。 对于对钥匙和宝藏(u, v), 如果lca != u && lca != v 那么起点从u子树出发, 终点在v子树就能得到贡献。 子树在dfs序下是连续一段, 所以就对应到二维平面一个矩形加上一个数值, 求值最大的点 阅读全文
posted @ 2019-09-12 16:05 NotNight 阅读(212) 评论(0) 推荐(0) 编辑
摘要: HDU - 5765 一个bond肯定把n个点分成两个连通块, 并且每个集合对应一个bond, 因为当前这个集合属于第一个连通块, 那么它的补集就输入另一个连通块, ok[ mask ] 表示 mask这些点集能否成为一个连通块。 我们称一个分配方案mask是好的当且仅当ok[ mask ] == 阅读全文
posted @ 2019-09-11 13:05 NotNight 阅读(248) 评论(0) 推荐(0) 编辑
摘要: HDU - 5789 这个题真的是有点恶心了。 ans[ i ] 表示以 i 为根的子树的答案, 也就是所有合法排列的逆序对数量。 way[ i ] 表示以 i 为根的合法排列数量。 dp[ i ][ j ][ k ] 表示以 i 为根所有合法排列中 j 节点排在第 k 个的合法排列数量。 然后用这 阅读全文
posted @ 2019-09-10 21:14 NotNight 阅读(217) 评论(0) 推荐(0) 编辑
摘要: HDU - 5788 我们考虑把每个点遍历一遍, 把枚举的当前的这个点改成100000对答案的影响。 如果我们把 u 变成 100000, 受到影响的是 u 以及它的祖先, 我们记midu为子树u的中位数, nexmidu为子树u中位数的下一个数。 只有 a[ u ]的值小于等于祖先的mid, 才会 阅读全文
posted @ 2019-09-09 17:01 NotNight 阅读(221) 评论(0) 推荐(0) 编辑
摘要: HDU - 5790 前缀总和为o(n)级别的, 然后把前缀hash一下变成求区间本质不同数字的个数。 或者不用hash丢到字典树上去就好了。 阅读全文
posted @ 2019-09-09 15:00 NotNight 阅读(182) 评论(0) 推荐(0) 编辑
摘要: HDU - 5784 感觉好久没写这种题了啊。。感觉细节好多。 对每个点极角排序统计钝角和直角, 还有三点共线的。 阅读全文
posted @ 2019-09-08 00:05 NotNight 阅读(158) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 70 下一页