P9288 [ROI 2018] Innophone

首先应该不难想到,最优情况下 \(a\in[X_i,X_{i+1}),b\in[Y_j,Y_{j+1})\) 其中 \(X,Y\) 分别是 \(x,y\) 排好序后的序列,那直接取 \(a=X_i,b=Y_j\),也就是 \(a\in x,b\in y\)

将除去 \(f(x,y)=a\) 的元素后剩下的元素集合称为 \(S\),显然 \(y_j\) 其中 \(j\in S\) 一定存在 \(y_j\) 使 \(b=y_j\)\(a\) 至少一种取值使结果最优。在 \(S\) 中选择其中一个元素使 \(b=y_i\) 对答案的贡献就是 \(k_iy_i\) 其中 \(k_i=\sum [y_j\ge y_i,x_i>x_j]\)

\(f(x,y)=a\) 取到的元素集合就是按 \(x\) 升序排序后的一个后缀,考虑排序后枚举 \(i\) 表示当 \(a=x_i\) 时的答案,那么 \(f(x,y)=a\) 的元素的贡献就是 \((n-i+1)\cdot x_i\),此时 \([1,i-1]\) 内的元素军不用考虑 \(a\) 的影响,所以 \(k_i=\sum_{j<i} [y_j\ge y_i]\)\(f(x,y)=b\) 的元素的贡献就是 \(\max_{j=1}^{i-1} k_jy_j\)

那现在就只用考虑维护 \(\max_{j=1}^{i-1} k_jy_j\)。发现每次往 \(S\) 中加入一个数 \((x,y)\) 那么 \(k_j\to k_j+1(y_j\le y)\),并且维护最大值,到这里做法就显然了。

\(x\) 为第一关键字升序排序,\(y\) 为第二关键字降序排序,对 \(y\) 离散化,以值域建立 \(KTT\)\(i\)\(1\) 扫到 \(n\)\(ans\to \max\{ans,(n-i+1)*i+mx\}\) 其中 \(mx\)\(KTT\) 维护的全局最大值,然后 \(k_j\to k_j+1,(j\in[1,y_i])\)。注意在全部元素都加入 \(S\) 后还得取一次 \(\max\)。然后就做完了。

有点笔误 upd on 2025.8.6。

posted @ 2025-10-16 09:51  Uesugi1  阅读(7)  评论(0)    收藏  举报