题目描述 Description

在一个荒凉的墓地上
有一个令人尊敬的守墓人, 他看守的墓地从来
没有被盗过, 所以人们很放心的把自己的先人的墓
安顿在他那
守墓人能看好这片墓地是必然而不是偶然.....
因为....守墓人懂风水 0.0
他把墓地分为主要墓碑和次要墓碑, 主要墓碑
只能有 1 个, 守墓人把他记为 1 号, 而次要墓碑有
n-1 个,守墓人将之编号为 2,3...n,所以构成了一个有 n 个墓碑的墓地。
而每个墓碑有一个初始的风水值,这些风水值决定了墓地的风水的好坏,所以守墓人
需要经常来查询这些墓碑。
善于运用风水的守墓人,通过一次次逆天改命,使得自己拥有了无限寿命,没人知道
他活了多久。
这天,你幸运的拜访到了他,他要求你和他共同见证接下来几年他的战果,但不过他
每次统计风水值之和都需要你来帮他计算,算错了他会要你命 QAQ
风水也不是不可变,除非遭遇特殊情况,已知在接下来的 2147483647 年里,会有 n 次
灾难,守墓人会有几个操作:
1.将[l,r]这个区间所有的墓碑的风水值增加 k。
2.将主墓碑的风水值增加 k
3.将主墓碑的风水值减少 k
4.统计[l,r]这个区间所有的墓碑的风水值之和
5.求主墓碑的风水值
上面也说了,很多人会把先人的墓安居在这里,而且守墓人活了很多世纪→_→,墓碑
的数量会多的你不敢相信= =
守墓人和善的邀请你帮他完成这些操作,要不然哪天你的旅馆爆炸了,天上下刀子.....
为了活命,还是帮他吧

输入输出格式 Input/output

输入格式:
第一行,两个正整数 n,f 表示共有 n 块墓碑,并且在接下来的
2147483647 年里,会有 f 次世界末日
第二行,n 个正整数,表示第 i 块墓碑的风水值
接下来 f 行,每行都会有一个针对世界末日的解决方案,如题所述,标记同题

输出格式:

输出会有若干行,对 4 和 5 的提问做出回答

输入输出样例 Sample input/output

样例测试点#1

输入样例:

5 6
0 0 0 0 0
1 1 5 1
1 1 3 3
2 3
3 1
4 1
5

输出样例:

16
7

说明 description

20%的数据满足:1≤n≤100
50%的数据满足:1≤n≤6000
100%的数据满足:1≤n,f≤2*10^5

#include <iostream>
#include <cstdio>
using namespace std;#define ls id<<1
#define rs (id<<1)+1
#define lson l,mid,ls
#define rson mid+1,r,rsconst int maxn=200001;struct segment_tree{int l,r;long long tag,num;segment_tree(){tag=num=l=r=0;}
}t[maxn*4];int n,f;
int num[maxn];void push_up(int id){t[id].num=t[ls].num+t[rs].num;
}void push_down(int id){if(t[id].tag){t[ls].tag+=t[id].tag;t[rs].tag+=t[id].tag;t[ls].num+=t[id].tag*(t[ls].r-t[ls].l+1);t[rs].num+=t[id].tag*(t[rs].r-t[rs].l+1);t[id].tag=0;}
}void build(int l,int r,int id){t[id].l=l;t[id].r=r;if(l==r){t[id].num=num[l];t[id].tag=0;return;}int mid=(l+r)>>1;build(lson);build(rson);push_up(id);
}long long query(int L,int R,int id){if(L<=t[id].l && t[id].r<=R)return t[id].num;push_down(id);long long res=0;int mid=(t[id].l+t[id].r)>>1;if(mid<L)res=query(L,R,rs); elseif(mid>=R)res=query(L,R,ls);else res=query(L,mid,ls)+query(mid+1,R,rs);return res;
}void update(int L,int R,int id,int c){if(L<=t[id].l && t[id].r<=R){t[id].num+=(t[id].r-t[id].l+1)*c;t[id].tag+=c;return;}push_down(id);if(R>=t[rs].l)update(L,R,rs,c);if(L<=t[ls].r)update(L,R,ls,c);push_up(id);
}int main(){scanf("%d%d",&n,&f);int i,x,l,r,k;for(i=1;i<=n;i++)scanf("%d",&num[i]);build(1,n,1);for(i=1;i<=f;i++){scanf("%d",&x);if(x==1){scanf("%d%d%d",&l,&r,&k);update(l,r,1,k);}if(x==2){scanf("%d",&k);update(1,1,1,k);}if(x==3){scanf("%d",&k);update(1,1,1,-k);}if(x==4){scanf("%d%d",&l,&r);printf("%lld\n",query(l,r,1));}if(x==5)printf("%lld\n",query(1,1,1));}return 0;
}

转载于:https://www.cnblogs.com/qscqesze/p/4322160.html

洛谷OJ U552 守墓人 线段树模板题相关推荐

  1. 线段树模板题3:区间染色问题

    1.3线段树模板题3:区间染色问题 在DotA游戏中,帕吉的肉钩实际上是大多数英雄中最恐怖的东西.挂钩由长度相同的几个连续的金属棍组成. 现在,帕吉(Pudge)希望对挂接进行一些操作. 让我们将钩子 ...

  2. J.哭泣的阿木木(线段树模板题)

    哭泣的阿木木 Description 没啥用的背景故事: 在远古的恕瑞玛,有一个孤独而又忧郁的灵魂,阿木木.他在世间游荡,只为找到一个朋友.他遭受了一种远古的巫术诅咒,注定忍受永世的孤单,因为被他触碰 ...

  3. 洛谷(P3373)线段树加乘混合模板

    题目链接:P3373 [模板]线段树 2 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这道题目的意思很明确,就是要我们在线完成区间的乘和加运算并支持查询区间和的一个问题.处理这道 ...

  4. 【线段树】[LUOGU 守墓人] [LUOGU 维护序列] 线段树模板题

    题目: 题目链接:[LUOGU 守墓人] 题解: 线段树单点修改,区间修改,单点查询,区间查询,一系列线段树基本操作,模板打就好. (回头再补一个分块和树状数组的这种板子题,就是用分块和树状数组再写一 ...

  5. hdu1156(简单线段树 模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. 试题 算法训练 操作格子(线段树模板题)

    资源限制 内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3 ...

  7. UESTC - 1057 秋实大哥与花 线段树模板题

    http://acm.uestc.edu.cn/#/problem/show/1057 题意:给你n个数,q次操作,每次在l,r上加上x并输出此区间的sum 题解:线段树模板, #define _CR ...

  8. 【洛谷P1816 忠诚】线段树

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...

  9. 洛谷P3919可持久化线段树

    P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目提供者HansBug 站长团 评测方式云端评测 标签O2优化高性能 难度提高+/省选- 时空限制3000ms / 512MB 有了可持久 ...

最新文章

  1. Linux启动流程(二)
  2. Tianchi数据集最全更新!
  3. 坑爹的PHImageManager和PHImageRequestOptions
  4. codeforces392B
  5. Monorail tutorial
  6. Qt TCP协议 传输简单字符串实例
  7. 管理信息系统开发项目管理(VIVID)
  8. 项目质量监测(三)e2e test端到端测试——单元测试和端到端测试 e2e test工具-Cypress Nightwatch TeatCafe Codecov-测试结果可视化
  9. 【转】小谈PNG转SVG的方法 在线转换网站与illustrator
  10. 产品经理学项目管理04:企业管理金字塔
  11. Android 非功能性测试(性能测试)
  12. PyCharm配置SSH和SFTP连接远程服务器
  13. fractions -- 分数
  14. 游戏金币单位换算管理类
  15. 纯净Vue模板安装教程
  16. Photoshop保存图片时闪退
  17. C#中Listbox、Textbox、Richtextbox三者之间的区别 ?
  18. iframe嵌入网页时,页面大小怎么自适应
  19. css选择器及其优先级
  20. 关于最新笔记本机型预装win8如何更换为win7的解决办法

热门文章

  1. vue父组件往子组件传值时报错Property or method 选择操作人 is not defined on the instance but referenced during rende
  2. CoordinatorLayout + AppBarLayout 实现标题栏置顶
  3. 4. 卷积神经网络CNN
  4. B - Carries SCU - 4437
  5. class 5 搭建个人 Leanote 云笔记本
  6. A WebView method was called on thread 'JavaBridge'. All WebView methods must be called
  7. 2018 金华市中小学学生计算机,2018年金华市中小学生校园足球秋季联赛圆满落幕...
  8. 搭建一个大数据分析处理平台,主要划分为哪几步?
  9. 《西方经济学》笔记1-需求曲线
  10. 【游戏开发阅读列表2】动画(Anima2D、粒子、物理等)