做题记录 26.2.26

\(\textcolor{purple}\odot\) P15375 Soso 的模法矩阵 / modmat

考虑变进制,第 \(i\) 位满 \(b_i\)\(1\),每次乘以 \(a_i\),容易在此过程中统计答案

时间复杂度 \(O(nm)\)

代码

参考

\(\textcolor{purple}\odot\) P15381 雨き声残響 / ame

\(f_{i,0}\) 表示从 \((1,1)\)\((i,1)\) 并填满 \((1\sim i,1\sim 3)\) 的方案数,\(f_{i,1}\) 表示从 \((1,1)\)\((i,3)\) 并填满 \((1\sim i,1\sim 3)\) 的方案数,易得 \(f_{0,0}=f_{1,1}=1\)\(f_{i,0/1}=2^{i-2}\;(i>1)\)

\(g_i\) 表示 \(3\times i\) 的矩阵从左上角进入左下角出去的方案数,易得 \(g_i=[2\nmid i]2^{\frac{i-1}2}\)

对于一组询问 \((n,x,y)\),特判 \(n<3\) 的情况

\(x=2\),则枚举 \(0\le l\le y-1\) 表示先用 \(f\) 填充 \(1\sim l,1\sim 3\),走到 \((l,\ast)\),然后走到 \((y,\ast)\),用 \(g\) 填充 \((y+1\sim n,3)\) 部分,再绕回来填充剩余部分,方案数为 \(g_{n-y}\sum_{l=0}^{y-1} (f_{l,0}+f_{l,1})\)

\(x=1\)\(x=3\),特判 \(y=n\),显然答案为 \(f_{n,[x=1]}\),否则答案为 \(f_{y-1,[x=1]}g_{n-y1}+[y>1]g_{n-y-1}\sum_{l=0}^{y-2} f_{l,[x=1]}\)

容易做到 \(O(n+T)\)

代码

参考

\(\textcolor{purple}\odot\) P15391 最小生成树 / sosomst

每个集合建立一棵线段树,每个子树维护区间内 \(a\) 的最大值,\(b\) 的最大值,最优答案,空子树用 \(\text{ST}\) 表维护区间 \(b\) 最大值

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

代码

参考

\(\textcolor{purple}\odot\) P11731 [集训队互测 2015] 最大异或和

转化为维护差分数组,显然总修改次数为 \(O(n+q)\) 的,每个修改存在于一个区间,前缀线性基即可

时间复杂度 \(O(\frac{(n+q)nm}\omega)\)

代码

参考

\(\textcolor{black}\odot\) AT_agc072_a [AGC072A] Rhythm Game

可以转化为有 \(n\) 个区间 \([t_i-x_i,t_i+x_i+d]\),要从中选出长度为 \(2x_i\) 的子区间,要求所有选出的子区间不交

若没有左端点的限制,显然按右端点从小到大排序后贪心选择最优

先按此方式排序,加入左端点限制后可能轮到一个任务时还没有开始

定理:若 \(i<j\) 则任务 \(j\) 结束后任务 \(i\) 一定已经开始

证明:\(t_j-x_j+2x_j=t_j+x_j\ge t_i+x_i\ge t_i-x_i\)

因此最优方案为将排序后的序列划分为若干段,每段先执行最后一个,然后依次执行前面的

\(f_i\) 表示 \([1,i]\) 划分为若干段结束时间的最小值,\(f_0=0\),有解当且仅当 \(f_n\) 有限

要从 \(f_j\) 转移到 \(f_i\),令 \(T=\max (f_j,t_i-x_i)+2x_i\) 表示任务 \(i\) 的结束时间,则转移为

\[T+2\sum x_{j+1\sim i-1}\to f_i \]

要求为

\[T\le t_i+d+x_i \]

\[\forall j<k<i,T+2\sum x_{j+1\sim k}\le t_k+d+x_k \]

直接实现为 \(O(n^3)\) 的,枚举 \(j\) 贡献到 \(i\) 容易优化到 \(O(n^2)\)

代码

参考

posted @ 2026-02-27 07:13  Hstry  阅读(0)  评论(0)    收藏  举报