敌兵布阵 线段树
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
Lily 特别喜欢养花,但是由于她的花特别多,所以照料这些花就变得不太容易。她把她的花依次排成一行,每盆花都有一个美观值。如果Lily把某盆花照料的好的话,这盆花的美观值就会上升,如果照料的不好的话,这盆花的美观值就会下降。有时,Lily想知道某段连续的花的美观值之和是多少,但是,Lily的算术不是很好,你能快速地告诉她结果吗?
Input
第一行一个整数T,表示有T组测试数据。 每组测试数据的第一行为一个正整数N(N<=50000),表示Lily有N盆花。接下来有N个正整数,第i个正整数ai表示第i盆花的初始美观值(1<=ai<=50)。 接下来每行有一条命令,命令有4种形式: (1)Add i j, i和j为正整数,表示第i盆花被照料的好,美观值增加j(j<=30) (2)Sub i j, i和j为正整数,表示第i盆花被照料的不好,美观值减少j(j<=30) (3)Query i j, i和j为正整数,i<=j,表示询问第i盆花到第j盆花的美观值之和 (4)End,表示结束,这条命令在每组数据最后出现 每组数据的命令不超过40000条
Output
对于第i组数据,首先输出"Case i:"和回车。 对于每个"Query i j"命令,输出第i盆花到第j盆花的美观值之和。
Sample Input
9
7 9 8 4 4 5 4 2 7
Query 7 9
Add 4 9
Query 3 6
Sub 9 6
Sub 3 3
Query 1 9
End
Sample Output
13
30
50
第一次写线段树 写之前看了基神推荐的写线段树风格 dalao写的代码太漂亮了 仰望高端玩家
模仿写了一波 基本是照着dalao的风格和思路走的
#include <iostream>
#include <cstdio>#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1const int maxn=50005;
int sum[maxn<<2];void pushup(int rt)
{sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}void build(int l,int r,int rt)
{if(l==r){scanf("%d",&sum[rt]);return ;}int m=(l+r)>>1;build(lson);build(rson);pushup(rt);}void update(int p,int add,int l,int r,int rt)
{if(l==r){sum[rt]+=add;return;}int m=(l+r)>>1;if(p<=m)update(p,add,lson);elseupdate(p,add,rson);pushup(rt);}int query(int L,int R,int l,int r,int rt)
{if(L<=l&&r<=R){return sum[rt];}int m=(l+r)>>1;int ret=0;if(L<=m) ret+=query(L,R,lson);if(R>m) ret+=query(L,R,rson);return ret;
}using namespace std;
int main()
{//freopen("input.txt","r",stdin);int T,n;scanf("%d",&T);for(int cas=1;cas<=T;cas++){printf("Case %d:\n",cas);scanf("%d",&n);build(1,n,1);char op[10];while(~scanf("%s",op)){if(op[0]=='E') break;int a,b;scanf("%d%d",&a,&b);if(op[0]=='S'){update(a,-b,1,n,1);}if(op[0]=='A'){update(a,b,1,n,1);}if(op[0]=='Q'){printf("%d\n",query(a,b,1,n,1));}}}
}
转载于:https://www.cnblogs.com/Hyouka/p/5709542.html
敌兵布阵 线段树相关推荐
- HDU 1166 敌兵布阵(线段树:点更新,区间求和)
HDU 1166 敌兵布阵(线段树:点更新,区间求和) http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意: 给你n个整数,然后给你多条命令,每条命令如 ...
- hdu 1166 敌兵布阵 (线段树)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu1166 敌兵布阵 线段树
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- Hud 敌兵布阵 --线段树的插点问线
每个树存放的事左右端点的的总和,然后再递归往下分成更小的区间,根据着2*t是下一层节点的节点端点是(left,left+right)/2);2*t+1是右节点的区间是(left+right)/2+1, ...
- A - 敌兵布阵(线段树模版题)
传送门 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情 ...
- 题目敌兵布阵-------线段树(单点修改查询,区间修改查询)
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- HDU1166 敌兵布阵 [线段树模板]
题意:在序列中修改单点和查询区间和 #include<iostream> #include<cstdio> #include<cstring> #define ls ...
- HDU1166 敌兵布阵(树状数组模板题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU1166 敌兵布阵【树状数组】
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
最新文章
- 线程池运用不当的一次线上事故
- 国资委发文!10本书讲透数字化时代新机遇
- 使用 ADO.NET连接SQL Azure
- 不愧是我,短短10分钟就为公司省下了几万块 ( ー̀◡ー́ )
- HadoopMR-Spark-HBase-Hive
- 51CTO博客改版日记(目录) 2006年 by小废
- 快速阅读之眼球的训练
- DUET DISPLAY分屏软件IOS账号共享
- linux常用的英文单词收集
- oracle怎么关联表查询语句,Oracle数据库的多表关联查询SQL语句
- linux+qt使用assimp库进行模型加载
- 1179: 带参宏定义(函数专题)
- 摄像头参数详细介绍[转]
- FIL在十月份的ICO流通减产
- writeup 攻防世界 Decrypt-the-Message
- OpenNI 官网将于4月23日 关闭
- 常用测试工具-----龙卷风
- 标准体系,技术标准,政策标准,开发模板
- 网络-----各种协议等
- E212: 无法打开并写入文件
热门文章
- 我国文化的景点及其特色
- 电信计费业务:预后融合消息计费
- flink实战教程-使用set实时计算当天网站uv
- 提高计算机性能的主流方法,9种提高计算机性能的方法
- 心仪的企业抛出橄榄枝,但刚接受了不错的offer,怎样体面拒绝?
- BlackBerry Enterprice Server(BES)---push内容到手持设备的流程
- 风格迁移 图像合成 图像重构 更换姿态和图像背景(使用交叉注意控制进行提示到图像编辑)GAN网络增强版
- Vue的传值方式(二)——双向数据绑定【v-model】
- 交流异步电机矢量控制(二)——矢量控制原理
- 增强现实篇之英特尔实感技术-intel realsense