#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
#define lson rt << 1 // == rt * 2 左儿子
#define rson rt << 1 | 1 // == rt * 2 + 1 右儿子
#define int_mid int mid = tree[rt].l + tree[rt].r >> 1
int a[N]; // 初始值
struct node {
int l, r;
ll val, lazy;
} tree[N * 4];
void push_up(int rt) {
//tree[rt].val = min(tree[lson].val, tree[rson].val);
//tree[rt].val = max(tree[lson].val, tree[rson].val);
tree[rt].val = tree[lson].val + tree[rson].val;
}
void push_down(int rt) {
if (tree[rt].lazy) {
tree[lson].lazy += tree[rt].lazy;
tree[rson].lazy += tree[rt].lazy;
//{ // 维护最大最小值
// tree[lson].val += tree[rt].lazy;
// tree[rson].val += tree[rt].lazy;
//}
{ // 维护和
int l = tree[rt].l, r = tree[rt].r;
int mid = l + r >> 1;
tree[lson].val += 1ll * (mid - l + 1) * tree[rt].lazy;
tree[rson].val += 1ll * (r
线段树模板(维护最大值、最小值、和)【单点更新、单点查询、区间更新、区间查询】
最新推荐文章于 2024-05-26 22:12:41 发布