洛谷 P2357 守墓人
洛谷 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;
}
洛谷 P2357 守墓人的更多相关文章
- 『题解』洛谷P2357 守墓人
Portal Portal1: Luogu Description 在一个荒凉的墓地上有一个令人尊敬的守墓人,他看守的墓地从来没有被盗过, 所以人们很放心的把自己的先人的墓安顿在他那守墓人能看好这片墓 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- 洛谷P1538迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
- 洛谷八月月赛Round1凄惨记
个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...
随机推荐
- x3
#include<stdio.h> int main() { char ch; printf("输入一个字符:\n"); scanf("%c",&a ...
- 【转】ServletContext介绍及用法
1.1. 介绍 ServletContext官方叫servlet上下文.服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象.这个对象全局唯一,而且工程内部的所有servl ...
- CentOS6.9安装SonarQube7.6
1 安装前准备 Java (Oracle JRE 8 or OpenJDK 8) MySQL5.6 or MySQL5.7,具体可参考Centos6.9安装MySQL5.6 SonarQube7.6, ...
- hydra 常用命令解析
参数说明: Hydra v9.0 (c) 2019 by van Hauser/THC - Please do not use in military or secret service organi ...
- ubuntu18.04下安装无线网卡驱动心得
联想Lenovo的笔记本,装完系统wifi显示找不到适配器. lspci | grep Wireless 显示无线网卡类型为博通的BCM43162. 网上一查,果然有问题. apt install f ...
- 【mysql】修改mysql数据库密码
修改mysql数据库密码 操作系统:Linux centos7 数据库:mysql5.7 一.在已知MYSQL数据库的ROOT用户密码的情况下,修改密码 1.在Linux命令行,使用mysqladmi ...
- RestTemplate的三种请求方式
转载 https://blog.csdn.net/qq_36364521/article/details/84203133
- JAVAWeb入门之JSP基础知识
也是到了考试周,很多课都结了,准备去学点新东西.随后就开始自学JAVAWeb. 要学习JAVAWeb,首先需下面的知识: a) HTML/CSS/JS(前端页面),XML,JSON,vue ...
- 『公交线路 状压dp 矩阵乘法加速』
公交线路 Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1km. 作为公交车线路的规划者,小Z调查了市民的 ...
- C# NuGet常用命令
命令执行位置:工具=〉Nuget包管理器=〉程序包管理器控制台 一.安装 1.安装指定版本类库install-package <程序包名> -version <版本号> 2.安 ...