2015年5月14日
摘要: 题目描述 区间修改有别于单点修改,如果每次都修改到叶子节点,复杂度可以退化到O(n)。 因此为节点引入一个lazy标记,修改时,如果待修改区间与某个节点的区间重合,那么这个节点更新值后标记lazy,不再修改其子节点。 类似于查询操作,这个修改操作的复杂度是O(logn)。 另外,查询或修改时,如果遇到已经标记了lazy的节点,需要先将lazy标记下放到两个子节点,再进行后续处理。#include ... 阅读全文
posted @ 2015-05-14 17:58 xblade 阅读(187) 评论(0) 推荐(0)
摘要: 问题描述 依然是RMQ问题。过程需要修改某些点的数据。 使用线段树解决。 单点修改的复杂度是O(logn),即树深,只需要修改这个点的祖先节点。 区间查询的复杂度也是O(logn),因为除了第一步可能一分为二外,其他查询若有分解则分解后必然有一个区间是不需要再分解的。#include #include typedef struct _seg_tree_ { int left, rig... 阅读全文
posted @ 2015-05-14 13:33 xblade 阅读(230) 评论(0) 推荐(0)
摘要: 问题描述 询问区间最小值,过程中会对某些位置的值进行修改。 这题数据量很小,使用O(NQ)的方法做。 后续会有其他高效的解法。#include int data[10005]; int main(){ int n, q; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", data +... 阅读全文
posted @ 2015-05-14 13:16 xblade 阅读(326) 评论(0) 推荐(0)