题解:[ABC396F] Rotated Inversions
本文遵循 CC BY-NC-ND 4.0 协议,作者:U•ェ•*U,转载请获得作者授权。
先求
分析
因此可以令一个差分数组
最后,对于每个
import 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()