一道题16

$n \leq 100000$的序列支持$q \leq 100000$个操作:区间加;区间除下取整;求区间和;求区间Min。数字$-1e9 \leq a_i \leq 1e9$,区间加$-1e4 \leq c \leq 1e4$,除数$2 \leq d \leq 1e9$。

线段树。为了不除可以这样:设区间最大值$y$最小值$x$,当$x-\left \lfloor \frac{x}{d} \right \rfloor=y-\left \lfloor \frac{y}{d} \right \rfloor$时打上区间加标记即可,否则暴力递归。

可以发现一个数除log次就可以打标记了,如果没加这样子就每个点只会额外访问到$log_2Max$次,就可以过了

如果还有区间加,一次加只让$log_2n$个区间再额外访问$log_2c$次,因此俩log也是没问题的。

 

与此类似的复杂度分析题:

$n \leq 100000$的序列支持$q \leq 100000$个操作:区间或;区间与;区间求Max。数字$0 \leq a_i < 2^{20}$。

每次区间或,会把一些位强制变1,如果这区间的这一位相同就打个标记修改,否则暴力递归。区间与同理。

复杂度?$f(x)=f(l)+f(r)+g(x)$,$g(x)$表示这区间不同的数的个数。每次修改最多$f(root)$会增加$20log_2n$,每访问一个额外区间$f(root)$会-1,因此复杂度是$20nlog_2n$的。

posted @ 2018-04-24 08:50  Blue233333  阅读(144)  评论(0编辑  收藏  举报