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]\)。
trick: 为了让问题更直观,不妨将其转化到图上做,不难发现图是一个 DAG。
连边是显然的,那么就是求 \(S\) 到 \(T\) 的最长路。
由数据分点提示可以考虑将表格不断分治,考虑先按行分成两部分,令 \(m = \lfloor \frac{n+1}{2}\rfloor\),那么可以分成左右两部分,那么对于中间的点,可以充当一个媒介。
再考虑按列分为两部分,那么可以分为上下两部分。
将两种分法交替轮流下去,时间复杂度:\(\mathcal{O(n^3)}\),那么查询的时候就可以查询路径的媒介点。

浙公网安备 33010602011771号