#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e6 + 10;
int b[N], n, m;
struct vv{
ll l, r, sum, lazy;
};
vv tree[N*4];
//建树
inline void build(ll i, ll l, ll r){
tree[i].l = l, tree[i].r = r;
if(l == r){
tree[i].sum = b[l];
return;
}
ll mid = (l + r) / 2;
build(2*i, l, mid);
build(2*i+1, mid+1, r);
tree[i].sum = tree[2*i].sum + tree[2*i+1].sum;
}
//push_down
void push_down(ll i){
if(tree[i].lazy){
tree[2*i].lazy += tree[i].lazy;
tree[2*i+1].lazy += tree[i].lazy;
ll mid = (tree[i].l + tree[i].r)/2;
tree[2*i].sum += tree[i].lazy * (mid - tree[2*i].l + 1);
tree[2*i+1].sum += tree[i].lazy * (tree[2*i+1].r - mid);
tree[i].lazy = 0;
}
}
//区间查询
inline ll search(ll i, ll l, ll r){
if(tree[i].l >= l && tree[i].r <= r){
return tree[i].sum;
}
if(tree[i].r < l || tree[i].l > r) return 0;
push_down(i);
ll s = 0;
if(tree[2*i].r >= l) s += search(2*i, l, r);
if(tree[2*i+1].l <= r) s += search(2*i+1, l, r);
return s;
}
//区间修改
void add(int i, int l, int r, int k){
if(tree[i].l >= l && tree[i].r <= r) {
tree[i].sum += k * (tree[i].r - tree[i].l + 1);
tree[i].lazy += k;
return;
}
push_down(i);
if(tree[2*i].r >= l) add(2*i, l, r, k);
if(tree[2*i+1].l <= r) add(2*i+1, l, r, k);
tree[i].sum = tree[2*i].sum + tree[2*i+1].sum;
}
int main(){
scanf("%lld", &n);
cin >> n;
for(int i = 1; i <= n; i++) scanf("%lld", &b[i]);
build(1, 1, n);
}
08-29
209
08-19
942
08-20
280