、

P3582-POI-2015-R1-影迷-Movie-goer

题意

给定一个数组 \(a_{1, \ldots ,n}\),求 \(w_{a_i}\) 的最大子段和,但是要求最大子段和里只记录 \(a_i\) 只出现一次的代价。

\(m\le n\le 10^6,1\le w_i\le 10^6\)

思路

考虑枚举右端点,我们考虑对于 \(a_i\) 肯定只有最靠右的会出现代价。那么我们将上一个 \(a_i\) 的位置 \(p_{a_i}\) 的贡献设为 \(-w_{p_{a_i}}\),再将上上个的价值设为 \(0\),那么用线段树维护最大子段和的代价就可以直接做出来了。时间复杂度 \(\mathcal{O}(n\log n)\)。

posted @ 2026-09-24 14:44  tanghg  阅读(3)  评论(0)    收藏  举报