骚年,你只要种一棵主席树和两棵线段树就能A了这题了,多环保啊!
题面
出于一些原因,这里不放题面。
题解
考虑询问的实质。
其实询问的答案必然是序列A中一整段连续区间的最大值。
将$m$个操作进行处理,每个操作都往离它最近的有交集的两个操作(一个操作向左延伸,一个向右)建边。
然后询问的时候倍增,就能很快找到询问实际的左右边界。
用主席树又可以很快找到一个点在操作区间$[L,R]$中最后覆盖它的是哪一个操作。
于是乎建边的时候开一棵线段树,维护全局最大值的时候再开一棵,一共三棵树。
然后就好了。
代码
1 |
|