花々春はまた廻る | 2023.6.29做题记录
花々春はまた廻る | 2023.6.29做题记录
慣れない制服着た春の日
大人になりたくて背伸びした
夏の夜に咲いた刹那の花
脳裏に焼き付く幻
色づく並木道は綺麗で
秋風に誘われて歩いた
冴えわたる冬の寒い朝は
あなたの温もり感じて
终于有一次歌词和标题对上了(
P5068 [Ynoi2015] 我回来了
补题
这个期望在干什么……完全没用,实际上就是输出 \([L,R]\) 区间内答案的和,并且我们只要维护 \([1,10^5]\) 之内的答案就行了
首先我们显然可以做
\[\sum(R-L+1)\le 10^6
\]
因为询问可以有线段树维护修改,总复杂度用调和级数分析一下
考虑离线,复用一个 \(d\) 的答案
首先令 \(t_{d,i}\) 表示伤害为 \(d\) 的第 \(i\) 个区间最早存在随从是第几次操作
\[t_{d,i}=\min_{(i-1)d+1\le j\le \min(id,n)}a_j
\]
然后考虑每个询问,不妨假设 \(g_{d,i}\) 是伤害值为 \(d\) 的被触发至少 \(i\) 次最早在第几次操作
\[g_{d,i}=\max(g_{d,i-1},t_{d,i})
\]
那么只要询问在 \(g_{d,i}\) 之后,并且伤害区间包含 \(d\) 就会给答案贡献 \(1\) 次操作
也就是说我们单独考虑了每一个 \(d\) 对时间的贡献区间
那么我们可以先枚举时间维 \(i\) ,然后每次询问就变成了问有多少个点出现时间早于 \(i\) 且伤害值在区间 \([L,R]\) 之间,树状数组数一下点就行了
今天没了。一整天都在找题组题。

浙公网安备 33010602011771号