题目 题意:给定n个数,有q次查询,有两种操作
- 选择一个点并修改它的值为一个新的数
- 将所有值改为一个新的数
求每次修改后的数组总和。
思路:维护每个点的修改时间戳,以及修改所有点的整体的时间戳。 对于只修改一个点的情况,对于总和 s u m sum sum,我们只需要考虑较上次的总和,当前点的变化;对于修改所有点的情况,我们全量更新总和即可。详见代码
#include
using namespace std;
#define ll long long
const int maxn = 200010;
int n, q, op, pos, x;
struct node {
int val; // 取值
int ts; // 时间戳
}a[maxn], all;
void solve() {
scanf("%d%d", &n, &q);
ll sum = 0;// 总和
for (int i = 1; i
关注
打赏
热门博文