题目链接。
Statement
记 \(f(A)\) 为序列 \(A\) 的冒泡排序趟数,操作:单点改,全局查 \(f(A)\). \(n,m\le 5\cdot 10^5\),值域 1e9.
Solution
结论:
\[ Ans=\max_{i\in [1..n]}\left\{ \sum_{j \in [1..i]}[A_j>A_i] \right\} \]怎么观察出来啊 QAQ
证明:对于每个位置 \(p\),观察到每趟都会恰好把他前面一个大于他的数搬到他后面去。相等的数的相对位置关系是不变的。此时发生了一次 swap(a[i], a[i + 1])
.
不动脑的维护是树套树。观察到只问 max,而这样的位置 \(p\) 一定不会成为答案:他后面有比他小的数 \(q\),这样 \(q\) 的答案一定比 \(p\) 的大。于是我们只需要让“后面没有数比他小”的位置的维护值是正确的,其他位置的维护值不比答案大就行了。
一种合法的设计是:对每个 \(i\) 维护 \(i-\sum_{j\in [1..n]}[A_j<A_i]\),其中若两个数相同约定前面的小于后面的。这样就容易维护了,\(O(n\log n)\).
标签:..,题解,P9596,位置,冒泡排序,维护,sum From: https://www.cnblogs.com/laijinyi/p/18343990