- 伍衍 的博客
DAY7
- @ 2025-7-23 20:44:35
解:离线处理,先将所有询问按右端点排序,用mp数组存储颜色位置每次如果遇到一个重复的颜色,就将 mp[i] 更新为当前位置,这样就能避免重复情况,最后就能直接用前缀和了
解:这道题要先把它转化一下,先把数组排序一下,按照 数组从小到大,如果 数组相等,就按 数组从大到小排序。接下来,我们要对 数组进行离散化。再我们枚举每一个点,求出它后面有多少个 和 相等且 和 相等的元素,记为 。于是,我们可以按照四分之一楼兰图腾去做,看看前面有多少个比当前的 大,记为 ,就可以组成 个方案,将其累加到答案中,最后输出答案即可。
首先,题目给的公式固然是不可用的:
$$\sum_{i=1}^n\sum_{j=i+1}^n \max\left(a_j-a_i,0\right)$$我们可以画个图来理解公式:

(没时间画了,稍微借用一下别人的图片(>人<;)对不起)
可以发现,我们要求的答案就是红色减蓝色。
推出求红色的公式:
再推出算蓝色部分的公式:
最终答案为红色(排序前)减蓝色(排序后)(不要问为什么,问就是教训):
$$\sum_{i=1}^n a_i\times (i-1)-\sum_{i=1}^{n-1} a_i\times (n-i)$$直接算就行了
解:由于题目的交换方式,显而易见的是, 始终相等,所以我们可以先将两个数组的 a[i]+i 算出来后排序以判否,随后我们根据贪心策略(小的去小的,大的去大的)求出每个位置交换次数,最后求逆序对即可。