敌兵布阵

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

1
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

Case 1:
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

敌兵布阵 线段树相关推荐

  1. HDU 1166 敌兵布阵(线段树:点更新,区间求和)

    HDU 1166 敌兵布阵(线段树:点更新,区间求和) http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意: 给你n个整数,然后给你多条命令,每条命令如 ...

  2. hdu 1166 敌兵布阵 (线段树)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  3. hdu1166 敌兵布阵 线段树

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  4. Hud 敌兵布阵 --线段树的插点问线

    每个树存放的事左右端点的的总和,然后再递归往下分成更小的区间,根据着2*t是下一层节点的节点端点是(left,left+right)/2);2*t+1是右节点的区间是(left+right)/2+1, ...

  5. A - 敌兵布阵(线段树模版题)

    传送门 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情 ...

  6. 题目敌兵布阵-------线段树(单点修改查询,区间修改查询)

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  7. HDU1166 敌兵布阵 [线段树模板]

    题意:在序列中修改单点和查询区间和 #include<iostream> #include<cstdio> #include<cstring> #define ls ...

  8. HDU1166 敌兵布阵(树状数组模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  9. HDU1166 敌兵布阵【树状数组】

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

最新文章

  1. 线程池运用不当的一次线上事故
  2. 国资委发文!10本书讲透数字化时代新机遇
  3. 使用 ADO.NET连接SQL Azure
  4. 不愧是我,短短10分钟就为公司省下了几万块 ( ー̀◡ー́ )
  5. HadoopMR-Spark-HBase-Hive
  6. 51CTO博客改版日记(目录) 2006年 by小废
  7. 快速阅读之眼球的训练
  8. DUET DISPLAY分屏软件IOS账号共享
  9. linux常用的英文单词收集
  10. oracle怎么关联表查询语句,Oracle数据库的多表关联查询SQL语句
  11. linux+qt使用assimp库进行模型加载
  12. 1179: 带参宏定义(函数专题)
  13. 摄像头参数详细介绍[转]
  14. FIL在十月份的ICO流通减产
  15. writeup 攻防世界 Decrypt-the-Message
  16. OpenNI 官网将于4月23日 关闭
  17. 常用测试工具-----龙卷风
  18. 标准体系,技术标准,政策标准,开发模板
  19. 网络-----各种协议等
  20. E212: 无法打开并写入文件

热门文章

  1. 我国文化的景点及其特色
  2. 电信计费业务:预后融合消息计费
  3. flink实战教程-使用set实时计算当天网站uv
  4. 提高计算机性能的主流方法,9种提高计算机性能的方法
  5. 心仪的企业抛出橄榄枝,但刚接受了不错的offer,怎样体面拒绝?
  6. BlackBerry Enterprice Server(BES)---push内容到手持设备的流程
  7. 风格迁移 图像合成 图像重构 更换姿态和图像背景(使用交叉注意控制进行提示到图像编辑)GAN网络增强版
  8. Vue的传值方式(二)——双向数据绑定【v-model】
  9. 交流异步电机矢量控制(二)——矢量控制原理
  10. 增强现实篇之英特尔实感技术-intel realsense