Portal

Portal1: Luogu

Description

在一个荒凉的墓地上有一个令人尊敬的守墓人,他看守的墓地从来没有被盗过, 所以人们很放心的把自己的先人的墓安顿在他那守墓人能看好这片墓地是必然而不是偶然.....

因为....守墓人懂风水。他把墓地分为主要墓碑和次要墓碑,主要墓碑只能有\(1\)个, 守墓人把他记为\(1\)号, 而次要墓碑有\(n-1\)个,守墓人将之编号为\(2, 3 \dots n\),所以构成了一个有\(n\)个墓碑的墓地。

而每个墓碑有一个初始的风水值,这些风水值决定了墓地的风水的好坏,所以守墓人需要经常来查询这些墓碑。

善于运用风水的守墓人,通过一次次逆天改命,使得自己拥有了无限寿命,没人知道他活了多久。

这天,你幸运的拜访到了他,他要求你和他共同见证接下来几年他的战果,但不过他每次统计风水值之和都需要你来帮他计算,算错了他会要你命QAQ,风水也不是不可变,除非遭遇特殊情况,已知在接下来的\(2147483647\)年里,会有\(n\)次灾难,守墓人会有几个操作:

  1. 将\([l,r]\)这个区间所有的墓碑的风水值增加\(k\);

  2. 将主墓碑的风水值增加\(k\);

  3. 将主墓碑的风水值减少\(k\);

  4. 统计\([l,r]\)这个区间所有的墓碑的风水值之和;

  5. 求主墓碑的风水值。

上面也说了,很多人会把先人的墓安居在这里,而且守墓人活了很多世纪,墓碑的数量会多的你不敢相信,守墓人和善的邀请你帮他完成这些操作,要不然哪天你的旅馆爆炸了,天上下刀子\(\dots \dots\)为了活命,还是帮他吧。

Input

第一行,两个正整数\(n, f\)表示共有\(n\)块墓碑,并且在接下来的\(2147483647\)年里,会有\(f\)次世界末日;

第二行,\(n\)个正整数,表示第\(i\)块墓碑的风水值;

接下来\(f\)行,每行都会有一个针对世界末日的解决方案,如题所述,标记同题。

Output

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

Sample Input

5 7
0 0 0 0 0
1 1 5 1
1 1 3 3
2 3
3 1
4 1 5
2 1
5

Sample Output

16
7

Hint

\(20\%\)的数据满足:\(1 \le n \le 100\);

\(50\%\)的数据满足:\(1 \le n \le 6000\);

\(100\%\)的数据满足:\(1 \le n, f \le 2 \times 10^{5}\);

Solution

这题树状数组。

c1[]来维护和,c2[]来维护积。

对于询问\([x, y]\)区间,可以用query(y) - query(x - 1) + (x == 1) * 主墓碑的风水值来求值,其中query(y) - query(x - 1)类似于前缀和,(x == 1) * 主墓碑的风水值表示\([x, y]\)区间包不包含主墓碑,如果包含则加上主墓碑单独维护的。

其中主墓碑需要单独维护。

Code

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>using namespace std;typedef long long LL;
const int MAXN = 500005;
int n, m, last;
LL first_value, c1[MAXN], c2[MAXN];
inline int lowbit(int x) {//树状数组专属操作return x & -x;
}
inline void update(int x, LL val) {//更新for (LL i = x; i <= n; i += lowbit(i)) {c1[i] += val;c2[i] += val * x;}
}
inline LL query(int x) {//查询LL ret = 0;for (LL i = x; i; i -= lowbit(i))ret += (x + 1) * c1[i] - c2[i];return ret;
}
int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) {int x;scanf("%d", &x);update(i, x - last);last = x;}while (m--) {int opt, x, y;LL val;scanf("%d", &opt);if (opt == 1) {scanf("%d%d%lld", &x, &y, &val);update(x, val);update(y + 1, -val);} elseif (opt == 2) {scanf("%lld", &val);first_value += val;} elseif (opt == 3) {scanf("%lld", &val);first_value -= val;} elseif (opt == 4) {scanf("%d%d", &x, &y);printf("%lld\n", query(y) - query(x - 1) + (x == 1) * first_value);} else printf("%lld\n", query(1) + first_value);//统一维护的加单独维护的}return 0;
}

转载于:https://www.cnblogs.com/shenxiaohuang/p/11221149.html

『题解』洛谷P2357 守墓人相关推荐

  1. 『题解』洛谷P3958 奶酪

    Portal Portal1: Luogu Portal2: LibreOJ Portal3: Vijos Description 现有一块大奶酪,它的高度为\(h\),它的长度和宽度我们可以认为是无 ...

  2. 洛谷 P2357 守墓人

    洛谷 P2357 守墓人 题目描述 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然.. ...

  3. 洛谷P2357 守墓人

    题目描述 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然..... 因为....守墓人 ...

  4. 洛谷 P2357 守墓人(树状数组)

    树状数组区间更新,区间查询的入门好题 const int N=2e5+5;int i,j,k;int n,m,t;ll a[N]; ll c[N][2];ll sum[N];void add(int ...

  5. 洛谷P2357 守墓人(差分+树状数组)

    原题链接 什么是差分? 7 8 6 5 8 18 20 35 //原数组 7 1 -2 -1 3 10 2 15 //差分数组 差分数组的前缀sum[i]即原数组的a[i] 我们构建两个树状数组 su ...

  6. [洛谷] P2357 守墓人

    原题 第一张图把我吓到了/kk 这道题就是我们最最喜爱(恶心)的线段树模板. 共5种操作: 1. 格式:1 l r k 表示区间[l,r]加上k; 2. 格式:2 val 表示主墓碑风水值加上val; ...

  7. NOIP2010关押罪犯题解(洛谷P1525) (并查集)

    NOIP2010关押罪犯题解(洛谷P1525) (并查集) 日常膜拜dalao:财神万岁!!!!!!!!!!!!!!!!!!!!! 日常凌晨三点水题解..(原谅我中间断更了几天,,马上分班考试了竞赛顾 ...

  8. 【题解】洛谷P4168 [Violet]蒲公英 (分块)

    [题解]洛谷P4168 [Violet]蒲公英 (分块)     D e s c r i p t i o n \rm Description Description 我们把所有的蒲公英看成一个长度为 ...

  9. 三连击(升级版)题解(洛谷P1618)

    看了洛谷的几篇题解之后,感觉自己的代码思路更明确,洛谷那边也交不上题解了,就只好写在这里咯~ 先直接放题目吧~ 思路 当模拟题来做,先枚举第一个数,首先要明确对一个数是否合法的几个条件: 1. 各个位 ...

最新文章

  1. 阿里某员工面试华为后吐槽:面试官太水,反问几句都答不上来
  2. NotePad++ 相关插件
  3. Mysql 8.0安装
  4. linux基本项目环境搭建
  5. 关系数据库理论:数据库的六大范式知识笔记
  6. 重学java基础第六课:markdown语法
  7. 【LeetCode笔记】84. 柱状图中最大的矩形(字符串、单调栈)
  8. apache 支持php urlmanager,Yii中urlManager的配置
  9. 【java】java 1.8 之 supplier 理解
  10. DllRegisterServer的调用失败的问题解决方法
  11. 蓝桥杯 ALGO-93 算法训练 反置数
  12. 组网胖模式_胖AP和瘦AP的区别,组网优缺点分析
  13. 计算机电缆静电,ZR-DJFPVP计算机电缆
  14. 毕业设计实战:单片机智能温控风扇设计 带智能调速人体感应 论文仿真 源码 原理图
  15. 2021年等保2.0工作必须了解的40个问题汇总
  16. 【Python】已知一张图片中的框图坐标,切割出目标框图(单个)
  17. 直播预告|ICML专场最后一场啦!来蹲守直播间呀
  18. leo-editor 关于 flutter 企业级路由 fluro 官方例子文学化编程分析
  19. 【C语言】结构体指针与结构体数组
  20. 通过Python终端输入命令对NAO机器人进行实时控制

热门文章

  1. hadoop集群web页面无法显示节点信息的解决方法
  2. mysql8 rank_jfinal 用mysql8.0的rank函数报错
  3. 【推荐】2022年新基建研究报告白皮书投资策略产业发展前景市场行情分析(附件中为网盘地址,报告持续更新)
  4. 【gensim问题记录】EOFError: unexpected end of input; is count incorrect or file otherwise damaged?
  5. Ubuntu使用日常
  6. MATLAB学习笔记:行列式及其应用
  7. mysql打平子表_对于oracle进行简单树查询(递归查询)
  8. 【xla】六、【构图阶段】xlaRunOp
  9. STM32H7系列其一
  10. Python爬虫实战,requests模块,Python实现告诉你女神节送什么礼物