9.5

9.5

题目 时限 空间
P11383 7000ms 512Mib
P15849 2000ms 1024Mib
qoj6846 3000ms 1024Mib
P15403 2500ms 1024Mib

喜提:0+20+45+0=65。

T1 P11383

给定 \(a_i\) 和 \(b_i\),求分配方案使得 \(\sum_{i\in A}a_i \geq \sum_{i \in B}a_i - \min_{i \in B} a_i\),B 的条件等价,输出方案。
\(n:5*10^5,a_i,b_i:10^9\)。

考虑简化版:\(a_i = b_i\)。
将整个序列从大到小排序,有 \(A\) 和 \(B\) 两堆,若 \(A<B\),则放入 \(A\),否则放入 \(B\)。

正确性:放入的数为最小的数,若放入的是 \(A\) 堆,那么原先 \(B>A\),即去掉放入的数,满足条件,而如果此时 \(B\) 去掉一个数,那么显然 \(B<A\),正确性显然。

如何将简化版推广到 \(a_i \neq b_i\)。

考虑对于先对于 \(a\) 做简化版,那么此时 \(A\) 和 \(B\) 两堆没有顺序,那么谁选 \(A\) 就看第二个限制。

本问题抓住 \(\min\) 想到可以倒序做。

T2 P15849

给定长为 \(n\) 的序列 \(c_i\),求最长连续段使得,\(\max(f1,f2,f3) - min(f1,f2,f3) \leq k\),\(f1\) 为 \(1\) 出现次数,\(f2\),\(f3\) 同理。
\(n:2*10^5,k:2*10^5,ci:3\)

trick: 由简单记录三种颜色转化为记录颜色之间的差值。

但是这样无法确定正负。

不妨考虑固定颜色1,\(p_i=f1_i-f2_i\),\(q_i = f1_i - f3_i\),则对于一个区间 \([l,r]\),当 \(p_r-p_{l-1} \leq k\),且 \(q_r - q_{l-1} \leq k\) 时,是合理的。

这就转化成了二维数点问题,直接扫描线 + 线段树做。

方便一点,可以证明除去整个序列满足平衡,对于一个满足 \(\leq k-1\) 的子段,不妨考虑往两边扩展,那么一定还是 \(\leq k\) 的,那么直接考虑为 \(k\) 的即可。

于是可以考虑用桶 + 线段树简单维护。

T3 QOJ6846

有 \(n\) 个终端,记为 \(P_i\),位置为 \((i,1)\),\(n\) 个中继站,记为 \(Q_j\),位置为 \((j,-1)\),\(P_i\) 使用费用为 \(u_i\),\(Q_j\) 使用费用为 \(v_j\),任意 \(P_i\) 和 \(Q_j\) 可建立链路,收益为 \(w_{i,j}\);
但是链路不能相交,终端至多在一条链路,中继器可在多条链路内,每次询问给出 \(l_1\),\(r_1\),\(l_2\),\(r_2\),表示仅能使用 \(l_1 \sim r_1\) 的终端,\(l_2\sim r_2\) 的中继器,求最大方案价值。
\(n:300,q:10^5,u_i,v_i:10^4,w_{i,j}:10^4\)。

\(n^2\) 的 dp 是好想到的。
抄一下dp 式子:
令 \(H_{i,j}\) 表示中继站 \(j\) 被使用,费用已支付,而 \(F_{i,j}\) 不做强制需求,考虑终端 \([a,i]\) 和中继站 \([c,j]\)。

\[H_{i,j} = \max(H_{i-1,j}+\max(0,p_{i,j}),F_{i-1,j-1}+p_{i,j}-v_{j}) \]

\[F_{i,j} = \max(F_{i-1,j},F_{i,j-1},H_{i,j}) \]

trick: 为了让问题更直观,不妨将其转化到图上做,不难发现图是一个 DAG。

连边是显然的,那么就是求 \(S\) 到 \(T\) 的最长路。

由数据分点提示可以考虑将表格不断分治,考虑先按行分成两部分,令 \(m = \lfloor \frac{n+1}{2}\rfloor\),那么可以分成左右两部分,那么对于中间的点,可以充当一个媒介。

再考虑按列分为两部分,那么可以分为上下两部分。

将两种分法交替轮流下去,时间复杂度:\(\mathcal{O(n^3)}\),那么查询的时候就可以查询路径的媒介点。

posted @ 2026-09-05 14:25  Harvey-zhuhy  阅读(2)  评论(0)    收藏  举报