题外话
-
纪念一下第一道 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
的时候