在人气动漫 Black Rock shooter 中,当加贺里对麻陶
说出了“滚回去“以后,与此同时,在另一个心灵世界里,
BRS 也遭到了敌人的攻击。此时,一共有 n 个攻击排成一行
朝着她飞了过来,每个攻击有一个伤害值。并且每个攻击伤
害可能随时变化。BRS 的攻击可以打掉一段连续的攻击。现
在,给出 m 段攻击,求出 BRS 最多可以打掉此段里多少的
伤害(就是说从给定一段里选择连续一段打掉)。伤害从 1
到 n 编号。

输入格式

第一行 2 个整数:n , m
第二行 n 个数:第 i 个数代表第 i 个攻击
第 3 到 2+m 行:每行三个数 k,x,y。若 k=1,x,y
代表查询的区间。若 k=2,代表第 x 个攻击伤害改为了 y
所有的伤害值绝对值<=1000

输出格式

对于每次 k=1,输出一个整数代表最大值

样例输入

5 3
1 2 -3 4 5
1 2 3
2 2 -1
1 2 3

样例输出

2
-1

数据范围
对于 20%的数据:n,m<=100
对于 60%的数据:n,m<=3000
对于 100%的数据:n<=500000,m<=100000

【题解】
这道题应该是一道有点裸的线段树,只是将模板的求和换作求最大值而已。即用线段树维护区间最大子段和。
solution写法:区间合并线段树,维护lm,rm,mx.

#include<cstdio>
#include<algorithm>
using namespace std;
const int MAX=500005;
struct tree
{int sum;//本段总和int v;//本段中自身的最大子段int vl,vr;//本段连接左或右端点的最大子段
}t[MAX<<2];
int N,M,k,x,y;int gi()
{int x=0,w=1;char ch=getchar();while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();if (ch=='-') w=-1,ch=getchar();while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*w;
}void Update(int now)
{int lson=now<<1,rson=now<<1|1;t[now].v=max(t[lson].vr+t[rson].vl,max(t[lson].v,t[rson].v));t[now].vl=max(t[lson].vl,t[lson].sum+t[rson].vl);t[now].vr=max(t[rson].vr,t[rson].sum+t[lson].vr);t[now].sum=t[lson].sum+t[rson].sum;
}void Build(int now,int l,int r)
{if (l==r){t[now].sum=t[now].v=t[now].vl=t[now].vr=gi();return;}int mid=(l+r)>>1;Build(now<<1,l,mid);Build(now<<1|1,mid+1,r);Update(now);
}int Query_l(int now,int l,int r)//查询左连续的最大子段
{if (l>=x&&r<=y)return t[now].vl;int mid=(l+r)>>1,res;res=Query_l(now<<1,l,mid);if (y>mid) res=max(res,t[now<<1].sum+Query_l(now<<1|1,mid+1,r));return res;
}int Query_r(int now,int l,int r)//查询右连续的最大子段
{if (l>=x&&r<=y)return t[now].vr;int mid=(l+r)>>1,res;res=Query_r(now<<1|1,mid+1,r);if (x<=mid) res=max(res,t[now<<1|1].sum+Query_r(now<<1,l,mid));return res;
}//x y是询问区间
int Query(int now,int l,int r)//区间最大子段
{if (l>=x&&r<=y)return t[now].v;int mid=(l+r)>>1,res;if (y<=mid) res=Query(now<<1,l,mid);else if (x>mid) res=Query(now<<1|1,mid+1,r);else res=max(Query_r(now<<1,l,mid)+Query_l(now<<1|1,mid+1,r),max(Query(now<<1,l,mid),Query(now<<1|1,mid+1,r)));return res;
}//把第x个数修改成y
void Change(int now,int l,int r)
{if (l==r){t[now].sum=t[now].v=t[now].vl=t[now].vr=y;return;}int mid=(l+r)>>1;if (x<=mid) Change(now<<1,l,mid);else Change(now<<1|1,mid+1,r);Update(now);
}int main()
{freopen("BRS.in","r",stdin);freopen("BRS.out","w",stdout);N=gi();M=gi();Build(1,1,N);while (M--){k=gi();x=gi();y=gi();if (k==1)printf("%d\n",Query(1,1,N));elseChange(1,1,N);}return 0;
}

转载于:https://www.cnblogs.com/yanshannan/p/7392299.html

Black Rock Shooter相关推荐

  1. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  2. 计算机谱子初音,初音未来 简谱与歌谱

    1. [钢琴谱] 1925 (4P 630x924 ) ) 2. [钢琴谱] 8月の花嫁 (9P 930x1235 ) ) 3. [钢琴谱] AI (4P 670x1012 ) 裙底飞扬) 5. [钢 ...

  3. 虚幻引擎C++终极射手教程 Unreal Engine C++ The Ultimate Shooter Course

    虚幻引擎C++终极射手教程 Unreal Engine C++ The Ultimate Shooter Course MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 ...

  4. 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FFT)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FF ...

  5. ROCK 聚类算法‏

    ROCK (RObust Clustering using linKs)  聚类算法‏是一种鲁棒的用于分类属性的聚类算法.该算法属于凝聚型的层次聚类算法.之所以鲁棒是因为在确认两对象(样本点/簇)之间 ...

  6. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)...

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  7. 创建XNA Shooter游戏——挑战:用引擎编写自己的游戏

    挑战:用引擎编写自己的游戏 本书之前已经讨论了很多游戏,在你开始最后一个游戏之前我建议你使用游戏引擎创建自己的小游戏.本章你看到了所有的重要步骤,从在Rocket Commander引擎的基础上创建X ...

  8. Python编程基础:第三十七节 石头剪刀布游戏Rock, Paper, Scissors Game

    第三十七节 石头剪刀布游戏Rock, Paper, Scissors Game 前言 实践 前言 我们这一节的内容主要是对前边学习内容的一个综合应用,以石头,剪刀,布游戏为例讲解列表.随机数.用户输入 ...

  9. SpaceEmacs Rock Day5 学习笔记

    <?xml version="1.0" encoding="utf-8"?> SpaceEmacs Rock Day5 学习笔记 SpaceEmac ...

最新文章

  1. (~解题报告~)L1-016 查验身份证 (15分)(29行代码AC!)
  2. 服务器显示转速负数,Moldflow使用常见问题及解决方案
  3. 带线程池的socket客户端与服务端
  4. 关于内核态和用户态切换开销的测试
  5. modbus rtu与计算机通讯,关于modbus rtu一个主站与多个从站通信的一点总结
  6. PLC液压控制系列之比例流量阀结构分析
  7. php个人发卡搭建教程,个人发卡平台ZFAKA程序搭建详细教程
  8. DRILLNET 2.0------第二十三章 井控压井单模型
  9. LVM动态添加硬盘空间
  10. Linux服务器配置静态IP地址方法
  11. 个人所得税计算函数 Oracle可用
  12. C++ POCO库(访问数据库,版本问题,本人配置失败)
  13. cad命令栏怎么调出来_软件CAD | 基本操作逻辑
  14. css3中var函数
  15. python 常微分方程 画向量场_用scipy-odein在python中求解向量常微分方程
  16. 硬核!用Arduino打造纯机械装置模拟数字时钟
  17. “别人家孩子”的大学四年
  18. 在线播放bt php,yunBT:一个基于TP3.1的多用户BT离线下载程序,支持在线播放
  19. 有限单元法基础 -- ING
  20. android平板和手机的区别,平板和手机有什么区别?

热门文章

  1. 数据挖掘算法一:K近邻原理及python实现
  2. linux suid提权原理,linux关于suid提权笔记
  3. max创意量子计算机,创意编程与MaxMSP
  4. 表情包说HTTP——(一)概览HTTP
  5. R语言ggplot2调整图例和注释的小技巧(图例透明度,大小,注释位置自动调整)
  6. CentOS 7.9 RPM安装Mysql数据库过程
  7. 制作丝巾 初学者
  8. 当我说我爱你时,你已经不在
  9. ​ 《乡村振兴战略下传统村落文化旅游设计》 金陵中阳照大地
  10. 微型计算机2019年年度盘点,「2019 IT产业市场回顾」光追时代、十代酷睿,2019年笔记本电脑市场年终盘点...