2024.8.8 test

A

对于长度为 \(2^n\) 的序列 \(A,B\),求 \(c_{k}=\max_{i|j}a_i+b_j\)\(n\le 18\)

考虑分治:每次分成 \(A_0,A_1,B_0,B_1\)
那么,\(C_0=\max(A_0+B_0),C_1=\max(A_0+B_1,A_1+B_0,A_1+B_1)\)
我们继续分治下去,即上面四种情况每种都要做一遍。
不妨合并同类项,\(C_1=\max(A_1+\max(B_0,B_1),B_1+\max(A_0,A_1))\)
\(B_1\)\(B_0\)\(\max\)\(A_1\)\(A_0\)\(\max\),这样只需要做三种情况。主定理算出 \(O(3^n)\)
还有一种想法是:枚举 \(k,i\),那么就是要查询某些位强制填 \(0\),某些填 \(1\),某些任意这个集合的 \(\max\)
可以写成 \(01?\) 这种形式,总共只有 \(3^n\) 种询问。
还有一种想法是:枚举 \(k\),把所有 \(i\cap j=0,i\cup j=k\) 的写出来,把 \(j\) 做一个后缀 \(\max\) 即可。
感觉对这类问题一窍不通。

C

有向图,求 \(s\to t\) 的最短路,可以走一次 \(u\to v\)(这条边可以没有),代价为 \((u-v)^2\)

注意到直接做边数是 \(O(n^2)\),所以我们要分层图。
先做一遍最短路,整体转移,用李超树维护转移,然后再松弛一遍即可。

D

三个序列 \(A,B,C\),定义 \(f_A(l,r)=\min(A_l\sim A_r)\),求所有区间的 \(f_A\times f_B\times f_C\) 的和。
\(n\le 10^5\)

扫描线,单调栈,线段树维护 \(ABC,AB,AC,BC,A,B,C\) 的和即可,只需区间加。

posted @ 2024-08-08 15:27  s1monG  阅读(7)  评论(0编辑  收藏  举报