我的创作纪念日

机缘

  1. 实战项目中的经验分享
  2. 日常学习过程中的记录
  3. 通过文章进行技术交流

收获

  1. 获得了 99 99 99 粉丝的关注
  2. 获得了大量正向的反馈,如赞、评论、阅读量等

日常

创作已经是你生活的一部分了

成就

#include <bits/stdc++.h>
using lint = long long;

struct TreeNode {
  lint w, lzy;
  size_t l, r;
  std::shared_ptr<TreeNode> lson, rson;

  TreeNode() {
    w = lzy = 0;
    l = r = -1;
    lson = rson = nullptr;
  }

  TreeNode(size_t _l, size_t _r) {
    w = lzy = 0;
    l = _l, r = _r;
    lson = rson = nullptr;
  }
};

bool inRange(int l, int r, int L, int R) {
  return l >= L && r <= R;
}
bool outRange(int l, int r, int L, int R) {
  return l > R || r < L;
}

void pushup(std::shared_ptr<TreeNode> &u) {
  u->w = u->lson->w + u->rson->w;
}
void maketag(std::shared_ptr<TreeNode> &u, lint delta) {
  u->lzy += delta;
  u->w += delta * (u->r - u->l + 1);
}
void pushdown(std::shared_ptr<TreeNode> &u) {
  size_t mid = u->l + u->r >> 1;
  if (!u->lson) u->lson = std::shared_ptr<TreeNode>(new TreeNode(u->l, mid));
  if (!u->rson) u->rson = std::shared_ptr<TreeNode>(new TreeNode(mid + 1, u->r));
  maketag(u->lson, u->lzy), maketag(u->rson, u->lzy);
  u->lzy = 0;
}

lint query(std::shared_ptr<TreeNode> &u, int L, int R) {
  if (outRange(u->l, u->r, L, R)) return 0;
  if (inRange(u->l, u->r, L, R)) return u->w;
  pushdown(u);
  size_t mid = u->l + u->r >> 1;
  return query(u->lson, L, R) + query(u->rson, L, R);
}

void update(std::shared_ptr<TreeNode> &u, int L, int R, lint delta) {
  if (outRange(u->l, u->r, L, R)) return ;
  if (inRange(u->l, u->r, L, R)) {
    maketag(u, delta);
    return ;
  }
  pushdown(u);
  size_t mid = u->l + u->r >> 1;
  update(u->lson, L, R, delta);
  update(u->rson, L, R, delta);
  pushup(u);
}

int main() {
  std::cin.tie(0)->sync_with_stdio(0);
  int n, m; std::cin >> n >> m;
  std::shared_ptr<TreeNode> root(new TreeNode(1, n));
  for (int i = 1, a; i <= n; ++i) {
    std::cin >> a;
    update(root, i, i, a);
  }
  for (int op, x, y, k; m; --m) {
    std::cin >> op >> x >> y;
    if (op == 1) std::cin >> k, update(root, x, y, k);
    else std::cout << query(root, x, y) << '\n';
  }
  std::cout.flush();
  return 0;
}

憧憬

在 2025 年中,AK CSP-J,CSP-S 300+,参加 NOIP

Tips

  1. 您发布的文章将会展示至 里程碑专区 ,您也可以在 专区 内查看其他创作者的纪念日文章
  2. 优质的纪念文章将会获得神秘打赏哦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值