数字替换 Description 给你一个数列a,共N个数字,其值为a1到an 你可以将这个数列a打乱得到数列b 定义T=1 * b[1]+2 * b[2]+3 * b[3]+.....n * b[n],现希望T越大越好 然后发现问题太简单了 于是有以下Q个独立的操作,即你每次操作完成后,a数列又恢复成原样 每次操作给出x,y代表将ax替换成y 现在问你每次替换后,T的值为多少 Format Input 第一行给出N 第二行给出N个数字 接下给出Q 接下来Q行题代码
时间: 2023-06-16 07:02:00 浏览: 140
计算Sn(求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值)
以下是 Python3 的代码实现:
```python
n = int(input())
a = list(map(int, input().split()))
t = sum((i+1)*a[i] for i in range(n))
q = int(input())
for _ in range(q):
x, y = map(int, input().split())
t += (y-x)*(x+1) + x*(n-x)*(y-a[x-1])
a[x-1] = y
print(t)
```
解释如下:
首先读入数列 $a$,计算出初始的 $T$ 值。
然后读入操作的数量 $q$,对于每个操作,我们计算其对 $T$ 的影响:
- 首先,将 $ax$ 替换为 $y$,此时 $T$ 的增量为 $(y-x)(x+1)$,原因是我们改变了 $x$ 这个位置上的数字,而 $x$ 之前的位置都会比原来多 $y-x$,$x$ 之后的位置都会比原来少 $y-x$。
- 其次,我们需要重新计算 $a$ 数组的影响,这可以通过 $x$ 之前位置上的数字数量乘以 $y-a_x$,再加上 $x$ 之后位置上的数字数量乘以 $a_x-y$ 来计算,即 $\sum_{i=0}^{x-1}(y-a_i)+\sum_{i=x+1}^{n-1}(a_i-y)=(x-1)(y-a_{x-1})+(n-x)(a_x-y)$。
- 最后,我们更新 $a$ 数组和 $T$ 值,并输出 $T$ 值。
时间复杂度为 $O(q)$。
阅读全文