当前位置: 首页 > news >正文

题解:P13979 数列分块入门 4

区间加法和区间询问,很明显是用线段树啦!

线段树通过懒标记实现了 $log$ 的时间复杂度,保证了在 $3e5$ 范围内不会超时。这道题重点是输出是非负的余数,所以要这样输出:

cout << (query(1, x, y) % (k + 1) + (k + 1)) % (k + 1) << "\n";

而不是:

cout << abs(query(1, x, y) % (k + 1)) << "\n";

代码如下:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 3e5 + 5;
struct node {int l, r, sum, tag;
}tr[N << 2];
int n, m, op, x, y, k, a[N];
inline void updata(int p){tr[p].sum = tr[p << 1].sum + tr[p << 1 | 1].sum;
}
inline void downdata(int p){int mid = (tr[p].l + tr[p].r) >> 1;if(!tr[p].tag) return ;tr[p << 1].sum += (mid - tr[p].l + 1) * tr[p].tag;tr[p << 1].tag += tr[p].tag;tr[p << 1 | 1].sum += (tr[p].r - mid) * tr[p].tag;tr[p << 1 | 1].tag += tr[p].tag;tr[p].tag = 0;
}
inline void build(int p, int l, int r){tr[p].l = l, tr[p].r = r;if(l == r){tr[p].sum = a[r];return ;}int mid = (l + r) >> 1;build(p << 1, l, mid);build(p << 1 | 1, mid + 1, r);updata(p);
}
inline void add(int p, int l, int r, int v){if(tr[p].l >= l && tr[p].r <= r){tr[p].sum += (tr[p].r - tr[p].l + 1) * v;tr[p].tag += v;return ;}downdata(p);int mid = (tr[p].l + tr[p].r) >> 1;if(l <= mid) add(p << 1, l, r, v);if(r > mid) add(p << 1 | 1, l, r, v);updata(p);
}
inline int query(int p, int l, int r){if(tr[p].l >= l && tr[p].r <= r) return tr[p].sum;downdata(p);int mid = (tr[p].l + tr[p].r) >> 1;int cnt = 0;if(l <= mid) cnt += query(p << 1, l, r);if(r > mid) cnt += query(p << 1 | 1, l, r);return cnt;
}
signed main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n;int m = n;for(int i = 1; i <= n; i++) cin >> a[i];build(1, 1, n);while(m--){cin >> op >> x >> y >> k;if(!op) add(1, x, y, k);else cout << (query(1, x, y) % (k + 1) + (k + 1)) % (k + 1) << "\n";}return 0;
}

管理大大求过!

http://www.rkmt.cn/news/2392.html

相关文章:

  • YOLO + OpenPLC + ARMxy:工业智能化视觉识别、边缘计算、工业控制的“三位一体”解决方案
  • NKOJ全TJ计划——NP4582
  • VibeCoding On Function AI Deep Dive:用 AI 应用生产 AI 应用
  • Kubernetes Pod控制器
  • kingbase金仓数据库的用户权限管理
  • POJ 3601 Subsequence
  • Logstash、Filebeat和Fluent比较
  • 剪映如何将草稿分享给别人?
  • 测试开发私教服务班4.0:大厂导师1对1带你突破职业瓶颈!
  • 【AP出版】第八届人文教育与社会科学国际学术会议(ICHESS 2025)
  • # 简单贪心题(greedy)
  • 免安装在线录屏神器推荐:纯前端屏幕录制工具使用指南
  • 锁相关记录
  • 第5讲 机器学习生态构成 - 详解
  • 当前流行的前端框架
  • 选择MyEMS:为什么开源是能源数字化未来的最佳路径?
  • 2025 Vue UI 组件库选型
  • FHQ-Treap
  • 什么是ARM架构?你需要知道的一切
  • 程序连接金仓数据库查询报错:ERROR:column r.id does not exist。字段不存在
  • mysql唯一索引,原理、创建与应用详解
  • redis查询和添加key的最简单方法
  • 111111
  • The 2025 ICPC Asia East Continent Online Contest (I) 7/13 A/B/C/D/G/I/M
  • [PHP之代码审计篇]CTFshowWeb入门 Web301~Web310
  • Kubernetes Pod
  • selenium+browsermobproxy抓POST请求
  • 算法-Dijkstra算法-02 - jack
  • typescript面试题
  • 答题赚现金程序介绍