题意简述
给定长为 的序列 。要求支持以下操作:
- 给定 ,将 全部加上 ;
- 给定 ,将 全部乘以 ;
- 给定 ,若这是第 次操作,则保护 直到第 次操作(含),这期间操作 对 无效。若 已经被保护到 ,则这一保护不会失效。
- 给定 ,输出 ,对 取余。
。
给定长为 的序列 。要求支持以下操作:
。
昨晚参与AtCoder ABC 236时认为G题似乎可做,直到看到数据范围才发现事情没有那么简单。
由于最近学习离线数据结构,又见识过一道题意接近的题目,故想到整体二分,二分每一个节点第一次能恰好经过条边到达的时间,然后考虑DP求解。设计状态表示在该图上经过恰好次转移能否到达点。但很快发现每一次二分时均要重新在图上运行DP,时间复杂度无法承受。况且DP递推转移的次数高达,甚至不可能是线性的复杂度。
今天查看题解,发现有几个重要的,从未考虑过的trick: