「2019.8.6 考试」反复琢磨

非常棒的一套题。

总的来说大体策略没有什么大的失误,就是T1T2挂的有点惨。

这几道题的思路都非常棒!

题解:

T1:其实发现先行乘还是列乘无关紧要,那就先处理列,然后记录下每一列的系数,这样可以通过第一列来找出下面几列的和,然后乘上行系数统计答案即可。

T2:考场上写了个倍增,但是挂掉了,事实证明倍增不是错的,但是我用了更强悍的线段树来维护修改操作从而A掉了这道题。

具体来说,可以把走一步当作一个置换,那么我们就有m个置换,每个置换里面有n个元素,用线段树维护置换,用nlogn的时间得到某一个区间内的置换,之后元素通过这个区间的答案也可以快速统计,这样修改和查询都是nlogn的(因为每个置换有n个元素)。

T3:线段树扫描线的思想,如果我们按照点对来分别进行操作,每个点的初值赋为他的下标,如果一个点的前趋或者后继在他的前面,那么区间(1---前趋/后继)+1,这样维护之后,发现每次扩展一个右端点之后,如果某个点的权值等于当前扩展的r,那么这个点到r是一个优美区间。为什么呢?其实找前趋后继相当于是找值上相邻的点对,而这些点对对前面的作出贡献,全职等于r的点被贡献了r-l次,也就是说他们之间有r-l个相邻点对,所以他们是一个优美区间。

关于统计答案。我们发现两个优美区间的交还是优美区间,那么其实我们需要找的是某个区间的右边的某个点(是某个最短优美区间的右端点,可以包住这个区间)。换成线段树的语言就是,区间左侧最靠右的值为右边当前扩展点的节点下标。因此就可以按照右端点排序,每次加入新操作,操作压堆按照左端点大根堆,这样可以保证堆顶不成立的情况下,堆底元素也必然不会被更新答案。

T2的思路反复琢磨了很久,重构了一次,总之虐的我很难受,然而最近才发现一个道理。

  反复琢磨出什么不重要,反复琢磨才重要。

猜你喜欢

转载自www.cnblogs.com/Lrefrain/p/11312881.html