题目描述

定义一个数组 $b = \{b_1, b_2, \dots, b_n\}$ 的权值为:

$$\sum_{i = 1}^{n - 1}\left(\left(\left(b_{i + 1} - b_{i}\right) \bmod 5 + 5\right)\bmod 5\right)$$

现在给定一个长为 $n$ 的数组 $a = \{a_1, a_2, \dots, a_n\}$,76会对这个数组进行 $q$ 次如下操作:

  • 给出两个整数 $l, r (1 \leq l \leq r \leq n)$,将区间 $[l, r]$ 内的所有元素加 1。
  • 请你在每次操作后输出当前数组的权值。注意,每次操作不独立。

输入描述

第一行输入两个整数 n, q (1 ≤ n, q ≤ 2×10^5)
第二行输入 n 个整数 a1, a2, …, an (0 ≤ ai ≤ 10^9)
之后的 q 行,每行输入两个整数 l, r (1 ≤ l ≤ r ≤ n),代表一次操作。

输出描述

对于每次操作,新起一行输出一个整数,代表操作后数组的权值。

示例

输入

3 2
1 2 3
1 2
2 3

输出

1
2

题解代码

#include <bits/stdc++.h>
using namespace std;

const int N = 501;

#define int long long

signed main() {
    int n, q;
    int total = 0;
    int a[200001];
    int d[20001];
    
    cin >> n >> q;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    
    for (int i = 1; i <= q; i++) {
        int l, r;
        cin >> l >> r;
        if (l > 1) {
            total -= (d[l-1] % 5 + 5) % 5;
            d[l-1]++;
            total += (d[l-1] % 5 + 5) % 5;
        }
        if (r < n) {
            total -= (d[r] % 5 + 5) % 5;  // 每一次计算都不要忘了进行取模运算
            d[r]--;
            total += (d[r] % 5 + 5) % 5;
        }
        cout << total << endl;
    }
    
    return 0;
}