编程题
### 问题描述 小明拥有一个数组,这个数组长度为 $n$ ,第 $i$ 个数的值为 $a_i$ 。对于这个数组,每一位都有自己的贡献值,为 $i\times a_i$ ,现在小明想进行 $m$ 次操作,每次操作都给出一个区间 $l,r$ 且 **$(r-l)\leq 100$** ,然后翻转这个区间中的所有值,即 $\lbrace a_l,a_l+1 ,\dots a_r\rbrace$ 反转为 $\lbrace a_r,a_r-1 ,\dots a_l\rbrace$ 。对于每次翻转,小明想知道这次翻转后这个数组的总贡献值为多少,即数组中的每一位的贡献值的和。你能帮帮他吗。 ### 输入格式 第一行,包含两个正整数 $n$ 和 $m$ $(1\leq n,m\leq 10^5)$ 。代表小明拥有一个长度为 $n$ 的数组,并将要进行 $m$ 次操作。 第二行,包含 $n$ 个正整数 $a_i$ $(1\leq a_i\leq 10^9)$ 。代表数组 $a$ 中每一位数的值。 接下来 $q$ 行,每行包含两个正整数 $l,r$ $(1\le l \le r\le n)$ **且 $(r-l)\leq 100$** ,代表小明该次操作所要翻转的区间。 ### 输出格式 输出 $q$ 行,每行包含一个正整数,代表对于每次操作,输出该次操作后这个数组的总贡献值为多少,即数组中的每一位的贡献值的和。 ### 样例输入 ``` 5 2 13521 13898 17327 31111 17309 4 5 4 5 ``` ### 样例输出 ``` 318089 304287 ``` ### 样例说明 对于给出的测试样例: 第一次翻转区间 $4\sim5$ 后,数组变为 $\lbrace 13521,13898,17327,17309,31111\rbrace$ ,他们的贡献值为 $\lbrace 13521\times 1+13898\times 2+17327\times3+17309\times 4+31111\times5\rbrace=318089$ ,故输出 $318089$ 。 第二次翻转区间 $4\sim5$ 后,数组 $a$ 变为 $\lbrace 13521,13898,17327,31111,17309\rbrace$ 他们的贡献值为 $\lbrace 13521\times 1+13898\times 2+17327\times3+31111\times4+17309\times 5\rbrace=304287$ 。
查看答案
赣ICP备20007335号-2