【Luogu P2781】 传教
这题是可以用线段树做的。
虽然$n\leq 10^9$
可以发现,真正需要用到的节点很少,故动态开点,只有需要用到的时候才新建节点。
这里我在下放标记的时候新建节点,因为每操作/查询一个节点都需要先下放标记。
时间复杂度$O(m\log n)$,空间复杂度$O(m\log n)$左右,拥有所有题解里面最优的理论复杂度和最大的常数所以甚至跑的更慢
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 typedef long long ll; 6 7 struct node { 8 ll data, tag; 9 node *lc, *rc; 10 11 node () { 12 data = 0, lc = rc = NULL; 13 } 14 15 void pushup() { 16 data = 0; 17 if(lc) data += lc->data; 18 if(rc) data += rc->data; 19 } 20 21 void pushtag(int l, int r) { 22 if(!lc) lc = new node; 23 if(!rc) rc = new node; 24 int mid = (l + r) >> 1; 25 lc->data += (mid - l + 1) * tag, lc->tag += tag; 26 rc->data += (r - mid) * tag, rc->tag += tag; 27 tag = 0; 28 } 29 30 } *st = new node; 31 32 void modify(node *cur, int l, int r, int ql, int qr, ll k) { 33 cur->pushtag(l, r); 34 if(ql <= l && r <= qr) { 35 cur->data += (r - l + 1) * k; 36 cur->tag = k; 37 } else { 38 int mid = (l + r) >> 1; 39 if(ql <= mid) modify(cur->lc, l, mid, ql, qr, k); 40 if(qr > mid) modify(cur->rc, mid + 1, r, ql, qr, k); 41 cur->pushup(); 42 } 43 } 44 45 ll query(node *cur, int l, int r, int ql, int qr) { 46 cur->pushtag(l, r); 47 if(ql <= l && r <= qr) { 48 return cur->data; 49 } 50 int mid = (l + r) >> 1; ll ans = 0; 51 if(ql <= mid) ans += query(cur->lc, l, mid, ql, qr); 52 if(qr > mid) ans += query(cur->rc, mid + 1, r, ql, qr); 53 return ans; 54 } 55 56 int main() { 57 int n, m, opt, x, y; ll z; 58 cin >> n >> m; 59 while(m--) { 60 cin >> opt; 61 if(opt == 1) { 62 cin >> x >> y >> z; 63 modify(st, 1, n, x, y, z); 64 } else { 65 cin >> x >> y; 66 cout << query(st, 1, n, x, y) << endl; 67 } 68 } 69 return 0; 70 }
View Code
转载于:https://www.cnblogs.com/zhylj/p/9488484.html
【Luogu P2781】 传教相关推荐
- luogu P1549 棋盘问题(2) 题解
luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...
- [Luogu] 选学霸
https://www.luogu.org/problemnew/show/P2170 并查集+DP #include <iostream> #include <cstring> ...
- Luogu 2470 [SCOI2007]压缩
和Luogu 4302 [SCOI2003]字符串折叠 差不多的想法,区间dp 为了计算方便,我们可以假设区间[l, r]的前面放了一个M,设$f_{i, j, 0/1}$表示区间$[i, j]$中是 ...
- 【Luogu】P1613 跑路
[Luogu]P1613 跑路 一.题目 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资 ...
- Luogu P6055 [RC-02] GCD(莫比乌斯反演,杜教筛)(这题乐死我了,真就图一乐呗)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P6055 Prob ...
- Luogu P3177 [HAOI2015] 树上染色(树上背包)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Luogu P3177 [HAOI2015] 树上染色 有一棵点数为 NNN 的树,树边有边权.给你一 ...
- Luogu P4178 Tree (点分治 + 树状数组)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P4178 Prob ...
- Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理,子集反演)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理) Problem n≤1 ...
- BZOJ 2154 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演,经典好题)(Luogu P1829)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P1829 [国家集训队]Crash的数字表格 / JZPTAB(反演,经典好题) Problem S ...
最新文章
- Websphere设备、企业部署应用程序 【应用】
- 根据已有项目jar文件生成maven的pom.xml
- Intent打开Activity
- C++模板的注意事项
- ui automator viewer 怎么获取界面名_ui交互设计怎么样
- Linux内存管理之红黑树(五)
- [原创].触摸屏滤波的一点心得
- 在Windows Server 2008 R2(64位)上安装SharePoint 2007出现的一个错误的解决方法
- 数据科学高级分析 (Data science advanced analytics)
- 智慧新泰时空大数据与云平台_《智慧城市时空大数据与云平台建设技术大纲》(2017版)正式发布...
- LINUX下汉化CodeBlocks
- DNS详解,权威DNS,递归DNS,转发DNS,公共DNS
- AFD-0654: AFD is not supported on Exadata systems CRS-10001: Errors xxx.ko was not found
- Unity项目--LoyPoly风格的FPS Demo(附试玩地址)
- 企业微信服务商集成解决方案
- jasperReport:Eclipse-Ireport插件安装及基本使用
- 五金自营平台进军MRO百亿市值 行业独角兽势头显现
- 注册hotmail.co .jp后缀的hotmail邮箱
- AWS、Google、Apple云端宕机背后的故事
- 相机成像(镜头与小孔成像)
热门文章
- linux 喂狗时间,狗狗正确喂食时间表,喂狗最佳时间指南
- 数据结构 排序 java_Java数据结构之排序---选择排序
- pythonsqlite事务_python sqlite3 的事务控制
- java new对象 =null_在Java中将对象分配为null会影响垃圾回收吗?
- XML模板解析————Dom4j解析xml案例分析
- labview 远程连接linux,SSH交互式通信总结:expect、plink、putty、sshpass、ALAB SSH
- ROS底盘控制节点 源码分析
- 矩阵论复习-过渡矩阵、生成子空间、表示矩阵、度量矩阵、酉空间、内积
- (小费马定理降幂)Sum
- css 回到首页按钮,js+css实现回到顶部按钮(back to top)