洛谷 #2357. 守墓人
题意
守墓人会有几个操作:
1.将[l,r]这个区间所有的墓碑的风水值增加 k。
2.将主墓碑的风水值增加 k
3.将主墓碑的风水值减少 k
4.统计[l,r]这个区间所有的墓碑的风水值之和
5.求主墓碑的风水值
主墓为1
题解
线段树,把主墓拎出来单独算
调试记录
无~~(是真的啥都没干)~~
#include <cstdio>
#define maxn 200005using namespace std;int val[maxn], n, f;struct node{int l, r, key, lazy;
}a[maxn << 2];void build(int cur, int l, int r){a[cur].l = l, a[cur].r = r;a[cur].lazy = 0;if (l == r){a[cur].key = val[l];return;}int mid = (l + r) >> 1;build(cur << 1, l, mid);build(cur << 1 | 1, mid + 1, r);a[cur].key = a[cur << 1].key + a[cur << 1 | 1].key;
}void pushdown(int cur){if (!a[cur].lazy) return;a[cur << 1].lazy += a[cur].lazy;a[cur << 1 | 1].lazy += a[cur].lazy;a[cur << 1].key += (a[cur << 1].r - a[cur << 1].l + 1) * a[cur].lazy;a[cur << 1 | 1].key += (a[cur << 1 | 1].r - a[cur << 1 | 1].l + 1) * a[cur].lazy;a[cur].lazy = 0;
}void update(int cur, int l, int r, int k){if (a[cur].r < l || a[cur].l > r) return;if (a[cur].l >= l && a[cur].r <= r){a[cur].key += (a[cur].r - a[cur].l + 1) * k;a[cur].lazy += k;return;}pushdown(cur);update(cur << 1, l, r, k);update(cur << 1 | 1, l, r, k);a[cur].key = a[cur << 1].key + a[cur << 1 | 1].key;
}int Query(int cur, int l, int r){if (a[cur].r < l || a[cur].l > r) return 0;if (a[cur].l >= l && a[cur].r <= r) return a[cur].key;pushdown(cur);return Query(cur << 1, l, r) + Query(cur << 1 | 1, l, r);
}int main(){scanf("%d%d", &n, &f);for (int i = 1; i <= n; i++) scanf("%d", &val[i]);build(1, 1, n);while (f--){int opt, l, r, k; scanf("%d", &opt);if (opt == 1){scanf("%d%d%d", &l, &r, &k);if (l == 1) val[1] += k, l++;if (l > r) continue;update(1, l, r, k);}if (opt == 2){scanf("%d", &k);val[1] += k;}if (opt == 3){scanf("%d", &k);val[1] -= k;}if (opt == 4){scanf("%d%d", &l, &r);if (l == 1){if (r == 1) printf("%d\n", val[1]);else printf("%d\n", Query(1, l + 1, r) + val[1]);}else printf("%d\n", Query(1, l, r));}if (opt == 5) printf("%d\n", val[1]);}return 0;
}
洛谷 #2357. 守墓人相关推荐
- [洛谷2357] 守墓人
题目描述 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然..... 因为....守墓人 ...
- 洛谷 P2357 守墓人
洛谷 P2357 守墓人 题目描述 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然.. ...
- 『题解』洛谷P2357 守墓人
Portal Portal1: Luogu Description 在一个荒凉的墓地上有一个令人尊敬的守墓人,他看守的墓地从来没有被盗过, 所以人们很放心的把自己的先人的墓安顿在他那守墓人能看好这片墓 ...
- 洛谷P2357 守墓人
题目描述 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然..... 因为....守墓人 ...
- 洛谷 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 ...
- 洛谷P2357 守墓人(差分+树状数组)
原题链接 什么是差分? 7 8 6 5 8 18 20 35 //原数组 7 1 -2 -1 3 10 2 15 //差分数组 差分数组的前缀sum[i]即原数组的a[i] 我们构建两个树状数组 su ...
- [洛谷] P2357 守墓人
原题 第一张图把我吓到了/kk 这道题就是我们最最喜爱(恶心)的线段树模板. 共5种操作: 1. 格式:1 l r k 表示区间[l,r]加上k; 2. 格式:2 val 表示主墓碑风水值加上val; ...
- 洛谷-题解 P2672 【推销员】
独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...
- 洛谷 P1142 轰炸
洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...
最新文章
- 数据集超越MS COCO,2020智源x旷视Objects365物体检测挑战赛开赛
- Swift中的闭包例子
- [缓存]关于memcached的详细介绍以及用法
- echarts 图例太多放不下怎么办_如何选择合脚的篮球鞋?篮球鞋不合脚怎么办?...
- 读卡器行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- python之路_自定义forms组件
- 视频教程-汇编语言程序设计-其他
- @Tableau 设计技巧 8.2:tableau官方教程(中文版pdf)
- 生物信息学算法之Python实现|Rosalind刷题笔记:005 GC含量计算
- 面试官:“你为什么离开上家公司?”怎么回答?
- 黑掉php网站,如何黑掉一个网站
- 2014.7.8 第一天学习hfss13
- fiddler证书安装
- 数据库系统:第二章关系数据库
- TensorFlow学习笔记1:graph、session和op
- Linux perm
- topcoder入门
- 如何设置vscode默认谷歌浏览器打开
- element-UI中el-select组件使用拼音进行模糊匹配可选择项
- 俄罗斯方块源码分享 html+css+js