洛谷 P2357 守墓人

题目描述

在一个荒凉的墓地上

有一个令人尊敬的守墓人, 他看守的墓地从来

没有被盗过, 所以人们很放心的把自己的先人的墓

安顿在他那

守墓人能看好这片墓地是必然而不是偶然.....

因为....守墓人懂风水 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.求主墓碑的风水值

上面也说了,很多人会把先人的墓安居在这里,而且守墓人活了很多世纪→_→,墓碑

的数量会多的你不敢相信= =

守墓人和善的邀请你帮他完成这些操作,要不然哪天你的旅馆爆炸了,天上下刀子.....

为了活命,还是帮他吧

输入格式

第一行,两个正整数 n,f 表示共有 n 块墓碑,并且在接下来的

2147483647 年里,会有 f 次世界末日

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

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

输出格式

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

输入输出样例

输入 #1复制

输出 #1复制

说明/提示

20%的数据满足:1≤n≤100

50%的数据满足:1≤n≤6000

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

题解:

怎么说呢?这是我做过的唯一一道题目背景出的比我还%%#¥的人。

(真是一道好题)

线段树模板题。竟然是蓝?

我曾一度怀疑查1号节点的值该怎么搞。后来直接把x,y置成了1.

完美解决。

记得开Longlong

代码:

#include<cstdio>
#define int long long
#define lson pos<<1
#define rson pos<<1|1
using namespace std;
const int maxn=2*1e5+1;
int n,f;
int a[maxn];
int tree[maxn<<2],lazy[maxn<<2];
void build(int pos,int l,int r)
{int mid=(l+r)>>1;if(l==r){tree[pos]=a[l];return;}build(lson,l,mid);build(rson,mid+1,r);tree[pos]=tree[lson]+tree[rson];
}
void mark(int pos,int l,int r,int k)
{tree[pos]+=(r-l+1)*k;lazy[pos]+=k;
}
void pushdown(int pos,int l,int r)
{int mid=(l+r)>>1;mark(lson,l,mid,lazy[pos]);mark(rson,mid+1,r,lazy[pos]);lazy[pos]=0;
}
void update(int pos,int l,int r,int x,int y,int k)
{int mid=(l+r)>>1;if(x<=l && r<=y){mark(pos,l,r,k);return;}pushdown(pos,l,r);if(x<=mid)update(lson,l,mid,x,y,k);if(y>mid)update(rson,mid+1,r,x,y,k);tree[pos]=tree[lson]+tree[rson];
}
int query(int pos,int l,int r,int x,int y)
{int mid=(l+r)>>1;int ret=0;if(x<=l && r<=y)return tree[pos];pushdown(pos,l,r);if(x<=mid)ret+=query(lson,l,mid,x,y);if(y>mid)ret+=query(rson,mid+1,r,x,y);return ret;
}
signed main()
{scanf("%lld%lld",&n,&f);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);build(1,1,n);while(f--){int k,x,y,z;scanf("%lld",&k);if(k==1){   scanf("%lld%lld%lld",&x,&y,&z);update(1,1,n,x,y,z);}else if(k==2){scanf("%lld",&z);update(1,1,n,1,1,z);}else if(k==3){scanf("%lld",&z);update(1,1,n,1,1,-z);}else if(k==4){scanf("%lld%lld",&x,&y);printf("%lld\n",query(1,1,n,x,y));}else if(k==5)printf("%lld\n",query(1,1,n,1,1));}return 0;
}

转载于:https://www.cnblogs.com/fusiwei/p/11536932.html

洛谷 P2357 守墓人相关推荐

  1. 『题解』洛谷P2357 守墓人

    Portal Portal1: Luogu Description 在一个荒凉的墓地上有一个令人尊敬的守墓人,他看守的墓地从来没有被盗过, 所以人们很放心的把自己的先人的墓安顿在他那守墓人能看好这片墓 ...

  2. 洛谷P2357 守墓人

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

  3. 洛谷 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 ...

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

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

  5. [洛谷] P2357 守墓人

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

  6. 【洛谷P2357】守墓人【线段树】

    linklinklink 分析: 如果普通暴力做 肯定过不了 那么我们就要考虑 更高效的 数据结构 比如分块 线段树 树状数组等 然后就可以用 线段树过了 要加lazylazylazy标记 比分块快2 ...

  7. [洛谷2357] 守墓人

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

  8. 洛谷 #2357. 守墓人

    题意 守墓人会有几个操作: 1.将[l,r]这个区间所有的墓碑的风水值增加 k. 2.将主墓碑的风水值增加 k 3.将主墓碑的风水值减少 k 4.统计[l,r]这个区间所有的墓碑的风水值之和 5.求主 ...

  9. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

最新文章

  1. [PHP] debug_backtrace()可以获取到代码的调用路径追踪
  2. 【JAVA秒会技术之秒杀面试官】JavaEE常见面试题(六)
  3. python自定义函数画图_利用Python绘图和可视化(长文慎入)
  4. 删除fedora多余内核:解决每次升级后旧内核还会存在的问题
  5. HTTP Request Content-Type:application/x-www-form-urlencoded、multipart/form-data、application/json
  6. java环境变量搭建
  7. [机器学习] Boosting算法4 --- LightGBM介绍与分布式
  8. 问题解决:QtCreator屏蔽指定警告:如C4819等
  9. JQuery Datatables —— 自定义导出列
  10. excel表中怎么插入visio_快速制作组织架构图,还在用Visio就out了,Excel简单三步搞定...
  11. asp.net(C#)网站发布后 Global.asax 里 Application_Error 不执行的问题
  12. pthread_join()详解及实验
  13. 英语作文《健康的重要性》
  14. mysql出现core dumped_mysql 段错误 (core dumped)
  15. symlink(): Protocol error
  16. 各种音视频编解码标准
  17. CSS图片底部留白的解决办法
  18. 基于机器学习的车牌识别系统
  19. 阿里云和腾讯云免费SSL证书 专题
  20. 从构建分布式秒杀系统聊聊分布式锁

热门文章

  1. dnf超时空漩涡副本路线流程图_《DNF》超时空漩涡怎么走 超时空漩涡走图开荒教程攻略...
  2. Unity中人物描边的“近大远小”优化
  3. Kafka 实战 (1):消息中间件原理与概念
  4. GOIP卡机网关SIM 对接群呼叫客服系统 自动外呼
  5. python炒股学习软件_要炒股,学Python-LSTM学习
  6. n个数输出最大值和最小值
  7. 各種軟体路由资料收集
  8. 7、中置、一元、赋值、结合、apply和update、unapply提取器
  9. 科普 | 一文看懂 IoT 物联网卡五大类型
  10. 解决es中must,must_not,should不能同时生效