T1:这题显然留下来的一段肯定是连续的一段,所以只需要维护固定长度的区间的最小值即可。
下面讲讲单调队列维护连续区间最小值。
首先,扫一遍区间。每扫到一个元素时就把这个元素加入队列,并把它之前所有比他大的元素弹掉。加元素时还要记录下这个元素的位置。
而每一次询问最小值时,就把队头位置在当前最左位置之前的元素全部出队,完成之后队头元素就是当前区间的最小值。
这就是单调队列维护最值的方法。这种方法要求所求区间一定是一段连续区间,而且要求题目要有“时效性”,也就是后入队的元素的影响时间一定要比先入队的元素的影响时间长,否则队头出队就不合法了。
T2:技巧题,只需维护每个点所在的完全子图,然后bfs,注意标记每个完全子图只能遍历一遍。
T3:可以用快速幂+矩阵乘法来做,在暴力的基础上用矩阵乘法来优化就行了。
总结:这一类从一个集合映射到另一个集合的题一般用矩阵乘法来做。