【Luogu P2781】 传教
这题是可以用线段树做的。
虽然$n\leq 10^9$
可以发现,真正需要用到的节点很少,故动态开点,只有需要用到的时候才新建节点。
这里我在下放标记的时候新建节点,因为每操作/查询一个节点都需要先下放标记。
时间复杂度$O(m\log n)$,空间复杂度$O(m\log n)$左右,拥有所有题解里面最优的理论复杂度和最大的常数所以甚至跑的更慢
#include <bits/stdc++.h> using namespace std; typedef long long ll; struct node {
ll data, tag;
node *lc, *rc; node () {
data = , lc = rc = NULL;
} void pushup() {
data = ;
if(lc) data += lc->data;
if(rc) data += rc->data;
} void pushtag(int l, int r) {
if(!lc) lc = new node;
if(!rc) rc = new node;
int mid = (l + r) >> ;
lc->data += (mid - l + ) * tag, lc->tag += tag;
rc->data += (r - mid) * tag, rc->tag += tag;
tag = ;
} } *st = new node; void modify(node *cur, int l, int r, int ql, int qr, ll k) {
cur->pushtag(l, r);
if(ql <= l && r <= qr) {
cur->data += (r - l + ) * k;
cur->tag = k;
} else {
int mid = (l + r) >> ;
if(ql <= mid) modify(cur->lc, l, mid, ql, qr, k);
if(qr > mid) modify(cur->rc, mid + , r, ql, qr, k);
cur->pushup();
}
} ll query(node *cur, int l, int r, int ql, int qr) {
cur->pushtag(l, r);
if(ql <= l && r <= qr) {
return cur->data;
}
int mid = (l + r) >> ; ll ans = ;
if(ql <= mid) ans += query(cur->lc, l, mid, ql, qr);
if(qr > mid) ans += query(cur->rc, mid + , r, ql, qr);
return ans;
} int main() {
int n, m, opt, x, y; ll z;
cin >> n >> m;
while(m--) {
cin >> opt;
if(opt == ) {
cin >> x >> y >> z;
modify(st, , n, x, y, z);
} else {
cin >> x >> y;
cout << query(st, , n, x, y) << endl;
}
}
return ;
}
【Luogu P2781】 传教的更多相关文章
- 洛谷——P2781 传教
P2781 传教 题目背景 写完暑假作业后,bx2k去找pear玩.pear表示他要去汉中传教,于是bx2k准备跟着去围观. 题目描述 pear把即将接受传教的人排成一行,每个人从左到右的编号为1-n ...
- 题解——洛谷P2781 传教(线段树)
可以说是数据结构学傻了的典型案例了 昨天跳到这题上 然后思考了一下 噫!好!线段树裸题 然后打完板子,发现\( n \le 10^9 \) 显然线段树直接做不太行 然后这题又只有普及的难度 然后我就 ...
- luoguP2781 传教
https://www.luogu.org/problemnew/show/P2781 简化版题意:有 n 个数,初始值为 0,进行 m 次操作,每次操作支持将 [l, r] 加 v 和查询 [l, ...
- Luogu 魔法学院杯-第二弹(萌新的第一法blog)
虽然有点久远 还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题 沉迷游戏,伤感情 #include <queue> ...
- luogu p1268 树的重量——构造,真正考验编程能力
题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...
- [luogu P2170] 选学霸(并查集+dp)
题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...
- [luogu P2647] 最大收益(贪心+dp)
题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...
- Luogu 考前模拟Round. 1
A.情书 题目:http://www.luogu.org/problem/show?pid=2264 赛中:sb题,直接暴力匹配就行了,注意一下读入和最后一句话的分句 赛后:卧槽 怎么只有40 B.小 ...
- luogu P2580 于是他错误的点名开始了
luogu P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...
随机推荐
- Apache Solr-6.0.1 (OpenLogic CentOS 7.2)
Apache Solr-6.0.1 (OpenLogic CentOS 7.2) 平台: CentOS 类型: 虚拟机镜像 软件包: java1.8 solr6.0.1 application ser ...
- Dll注入:Ring3 层 APC注入
APC,即Asynchronous procedure call,异步程序调用APC注入的原理是:在一个进程中,当一个执行到SleepEx()或者WaitForSingleObjectEx()时,系统 ...
- HDU2433 最短路 + 剪枝优化
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2433 ,最短路(SPFA或优化过的Dijstra) + 剪枝优化 这道题关键还是在几个剪枝上面,没有剪 ...
- [转]Cannot deserialize the current JSON array (e.g. [1,2,3]) into type
string content =[{"id": 3636, "is_default": true, "name": "Unit&q ...
- FreeRTOS_软件定时器
FreeRTOS 软件定时器 实验 创建2个任务,start_task.timercontrol_task. start_stask:创建timercontrol_task任务:创建周期定时器Auto ...
- 高级vim 配置
[root@chenbj ~]# pwd /root [root@chenbj ~]# cat .vimrc set nocompatible set pastetoggle=<F9> s ...
- Beyond Compare在Mac下永久试用
转自 作者:忆如初 链接:https://www.jianshu.com/p/596b4463eacd 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. 亲测可用 一. ...
- Oracle 自动生成hive建表语句
从 oracle 数据库导数到到 hive 大数据平台,需要按照大数据平台的数据规范,重新生成建表的 SQL 语句,方便其间,写了一个自动生成SQL的存储过程. ① 创建一张表,用来存储源表的结构,以 ...
- SpringBoot学习4:springboot整合listener
整合方式一:通过注解扫描完成 Listener 组件的注册 1.编写listener package com.bjsxt.listener; import javax.servlet.ServletC ...
- <转载>一般筛法和快速线性筛法求素数
素数总是一个比较常涉及到的内容,掌握求素数的方法是一项基本功. 基本原则就是题目如果只需要判断少量数字是否为素数,直接枚举因子2 ..N^(0.5) ,看看能否整除N. 如果需要判断的次数较多,则先用 ...