2026.1.21 NOI 模拟赛 题解

比赛

订正

T1 P130341 [省选二十连测第十五套 ] --T1--模块

题意

给定 \(h_{1\sim n}\),令 \(F(a_{1\sim m})=\sum_{i=1}^m (\min(\max a_{1\sim i},\max a_{i\sim m})-a_i)\),初始每个 \(h_i\) 为一段,每次给定一组相邻段合并,求每次合并后得到段的 \(F\)\(n\le 10^5\)

分析

每段维护最大值,及最大值左右两侧的单调栈,合并时将小的暴力插入大的

时间复杂度 \(O(n\log n)\)

代码

T2 P130342 [省选二十连测第十五套 ] --T2--网格

题意

一个 \(3\times n\)\(0/1\) 网格,每次翻转一个位置,或给定列的一个区间查询子矩形中填 \(1\times 2\)(可旋转)的骨牌(不要求填满,只能填在 \(0\) 位置,不可重叠)的方案数,\(n,q\le 30000\)

分析

\(\text{DDP}\) 模板,时间复杂度 \(O(n+q\log n)\)

代码

T3 P130343 [省选二十连测第十五套 ] --T3--矩阵

题意

一个 \(n\times m\) 的矩阵,每操作一个位置,它左右和上方的位置也会变化,\(q\) 次询问,每次给定 \(1\le l\le k\le r\le n\),取出第 \(l\sim r\) 行,通过若干次操作使之归零(不修改超出范围的位置,每个位置至多操作一次),求第 \(k\) 行的操作次数或判定无解或解不唯一,\(n\le 5\times10^4,m\le 50,q\le5\times10^5\)

分析

\(r\)\(l\) 扫描,容易高斯消元得到这一行的操作情况,若一次高斯消元无解或解不唯一则整个局面无解或解不唯一

每次的线性方程组左侧为固定的 \(M\),右侧为题目给定的矩阵第 \(i\) 行异或上一行的操作位置

\(M\) 不可逆则所有操作都无解或解不唯一,否则求出 \(M^{-1}\),令 \(a_i\) 表示题目给定的矩阵第 \(i\)

\(k\) 行的操作情况为 \(\sum_{i=k}^r (M^{-1})^{i-k+1} a_i\),拆为 \(M^{k-1} \times \sum_{i=k}^r (M^{-1})^i a_i\),两部分容易维护

时间复杂度 \(O(nm^2+qm)\)

代码

比赛结果

\(100+100+30\)\(\text{rk}4\)

posted @ 2026-01-23 09:07  Hstry  阅读(4)  评论(0)    收藏  举报