P11652 题解 \rightarrow 错解
先考虑 \(m = 0\) 的情况,可以用平衡树直接维护这个过程。
\(m \ne 0\) 时,考虑如下贪心:设 \(nxt_i\) 为第 \(i\) 次询问之后第一个 \(a_j = a_i\) 的 \(j\)(如果无后继则为无穷大),\(lst_i\) 为第 \(i\) 双鞋上一次出现的询问的位置。那么每次取出一双鞋后,若走廊没满直接放在走廊,否则取出走廊中所有鞋中 \(nxt_{lst_i}\) 最小的一双扔回栈中。
考虑为什么是对的。感性理解就是如果先把后继小的,后把后继大的放进栈中,那么后继小的先 \(\text{pop}\) 出去会算上后继大的这份贡献,反之则不会。
实现上,走廊用一个 \(\text{set}\) 维护即可。
写挂了好几发。注意 \(\text{set}\) 中不能有相同的元素。
卧槽想法好像是假的。
这题是错题,怎么这么多人切而且我还会了和 std 错的一样的解法((

浙公网安备 33010602011771号