##就是常规写法 用树状数组维护一个差分数组的前缀和,因为可推得若b[i]=a[i]-a[i-1],则a[i]=b[1]+…+b[i] (b[1]=a[1]-a[0],a[0]=0) 。 可发现a[i]只与b[j] (j<=i)有关,若将b[j]加上delta,其后所有值都将加dlt,因此只需改变b[i]就可实现b[i]到b[n]的区间修改。而将b[j+1]减去dlt,对a[j]无影响,其后所有值也减去dlt,恢复原值,即实现了区间修改操作。 因为求取a值用到的是前缀和,因此设t[i]为b[1]到b[i]的前缀和,a[i]=t[i]=b[1]+…b[i],即可大大降低时间复杂度。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 530000
long