NOIP2022 T4 题解
\(1\)~\(2\) 写你喜欢的暴力,复杂度\(O(Qn^3)\),期望得分\(8pts\)。
\(3\)~\(5\) 先预处理每个区间的最大值,查询用二维前缀和,复杂度\(O(n^2+Q)\),期望得分\(20pts\),也是本题的大众分。
本题的正解做法较多,这里仅展示线段树维护历史和做法。
\(6\)~\(25\) 在线不太好做,考虑离线,按\(r\)排序。于是我们可以把问题转化一下:设\(A_l\)表示\(a_l-a_r\)的最大值,其中\(r\)是递增枚举的。也就是说,\(A\)是动态维护的。同理,\(B_l\)表示\(b_l-b_r\)的最大值。设\(S_l=A_l\times B_l\)。那么,每枚举一个\(r\),就要找到对于\(a\),\(r\)前面第一个比它大的位置\(posa\)。把\(A_{posa+1}-A_r\)都赋值为\(a_r\)。同理,对于\(b\),找到\(r\)前面第一个比它大的位置\(posb\)。把\(B_{posa+1}-B_r\)都赋值为\(b_r\),同时更新\(S_i\),这个可以用单调栈实现。那查询\((l,r)\)就是在问枚举到\(r\)时,\(S_i\)的历史和之和,其中\((l\le i\le r)\)。这个过程可以用线段树维护历史和实现,对每个区间维护\([length,suma,sumb,sums,history]\),转移矩阵懒得摆了。复杂度\(O(125(n+Q)logn)\),无法通过。但是,我们发现只有矩阵中只有\(12\)个元素是有用的,于是我们维护\(12\)个\(tag\),手动矩阵乘法即可,复杂度\(O(40(n+Q)logn)\),可以通过,期望得分\(100pts\)。
最后来一句,相信\(NOIP\),实力到了,就一定能考出来!
浙公网安备 33010602011771号