2. 在后端插入 (w,v)
3. 删除前端的二元组
4. 删除后端的二元组
- 5. 给定 l,r,在当前 deque 中选择一个子集 S 使得 $\sum_{(w,v)\in S}w\bmod p\in[l,r]$ ,且最大化 $\sum_{(w,v)\in S}v$ .
+ 5. 给定 l,r,在当前 deque 中选择一个子集 S 使得 $\sum_{(w,v)\in S}w\bmod p\in[l,r]$ ,且最大化 $\sum_{(w,v)\in S}v$ .
- $m\leq 5\times 10^4,p\leq 500$ .
+ $m\leq 5\times 10^4,p\leq 500$ .
??? note "解题思路"
每个二元组是有一段存活时间的,因此对时间建立线段树,每个二元组做 log 个存活标记。因此我们要做的就是对每个询问,求其到根节点的路径上的标记的一个最优子集。显然这个可以 DP 做。 $f[S,j]$ 表示选择集合 S 中的物品余数为 j 的最大价值。(其实实现的时侯是有序的,直接 f[i,j]做)
1. $\operatorname{Add}( x , d )$ 操作:将 $x$ 到根的路径上所有点的 $k_i\leftarrow k_i + d$
2. $\operatorname{Mul}( x , d )$ 操作:将 $x$ 到根的路径上所有点的 $t_i\leftarrow t_i + d \times k_i$
- 3. $\operatorname{Query}( x )$ 操作:询问点 $x$ 的权值 $t_x$
+ 3. $\operatorname{Query}( x )$ 操作:询问点 $x$ 的权值 $t_x$
- $n,~m \leq 100000, ~-10 \leq d \leq 10$
+ $n,~m \leq 100000, ~-10 \leq d \leq 10$
若直接思考,下放操作和维护信息并不是很好想。但是矩阵可以轻松地表达。