专栏文章
题解:[ABC396F] Rotated Inversions
AT_abc396_f题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipyeir6
- 此快照首次捕获于
- 2025/12/03 19:58 3 个月前
- 此快照最后确认于
- 2025/12/03 19:58 3 个月前
本文遵循 CC BY-NC-ND 4.0 协议,作者:U•ェ•*U,转载请获得作者授权。
先求 时的逆序数:用树状数组在 时间内统计标准逆序数。
分析 时逆序数的变化: 观察每个位置 ,当 增加 时, 只有在等于模数(即 )时变为 ,就改变了它在序列中的相对大小。可以证明,当某个位置 满足 时,该位置会改变贡献,对全局逆序数的影响为
因此可以令一个差分数组 (下标范围 )满足:对于每个位置 ,在 时,加上 。
最后,对于每个 ,我们加上 即可。
PYTHONimport sys
n, m = map(int, sys.stdin.readline().split())
a = list(map(int, sys.stdin.readline().split()))
tree = [0] * (200010)
diff = [0] * (200010)
def add(x, val):
x += 1
while x <= m:
tree[x] += val
x += (x & -x)
def query(x):
x += 1
res = 0
while x:
res += tree[x]
x -= (x & -x)
return res
def main():
tmp = 0
for i in range(n):
tmp += i - query(a[i])
add(a[i], 1)
diff[m - 1 - a[i]] += (2 * i - (n - 1))
print(tmp)
for k in range(1, m):
tmp += diff[k - 1]
print(tmp)
if __name__ == '__main__':
main()
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...