花々春はまた廻る | 2023.6.29做题记录

花々春はまた廻る | 2023.6.29做题记录

慣れない制服着た春の日

大人になりたくて背伸びした

夏の夜に咲いた刹那の花

脳裏に焼き付く幻

色づく並木道は綺麗で

秋風に誘われて歩いた

冴えわたる冬の寒い朝は

あなたの温もり感じて

终于有一次歌词和标题对上了(

P5068 [Ynoi2015] 我回来了

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]\) 之间,树状数组数一下点就行了

今天没了。一整天都在找题组题。

posted @ 2023-06-29 21:35  Nelofus  阅读(43)  评论(0)    收藏  举报