P8512 [Ynoi Easy Round 2021] TEST_152

发布时间 2023-09-28 08:27:46作者: MrcFrst_LRY

题外话

  • 纪念一下第一道 Ynoi Easy Round.(上次那个是 Ynoi 模拟赛,什么时候才能做正统 Ynoi 啊/ll

  • 在图老师的逼迫下换了洛谷博客的主题和背景,还挺好看的感觉。


原题传送门

题意

给定一个长度为 \(m\) 的序列,初始全为 \(0\)。再给 \(n\) 个区间赋值操作。

回答 \(q\) 次询问,每次询问给定 \(L,R\),表示从 \(L\)\(R\) 执行完这 \(R-L+1\) 个操作,求全局和。

询问之间相互独立。


区间推平!直接 I Love Chtholly Tree!

然后考虑如何处理询问。询问是区间的形式,并且询问之间相互独立,所以考虑离线处理类似前缀的东西,或者按端点排序然后扫过去。

考虑 \(ODT\) 维护每次操作对全局和造成的影响,那么现在唯一剩下的问题就是如何处理时间戳。

结合上前面说的处理类似前缀的东西,考虑树状数组维护时间戳。相当于每次操作就是在对应的时间上单点修改记录全局和的变化,查询就是区间查询。

但是这样做的话不同时间的操作可能会互相影响。具体地,比如样例 \(1\) 的前两个操作,第一个是从 \(1\)\(4\) 赋值为 \(3\),第二个是从 \(2\)\(3\) 赋值为 \(1\)。这样的话,第二个操作的区间因为被包含在了第一个里面,所以它在原来基础上对全局和的影响其实并不是它本身带来的贡献,这个时候单独查询操作 \(2\) 就会出错。

所以考虑直接在 \(ODT\) 里面加上时间 \(t\) 一值,每次 Assign 的时候