#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxx = ;
int arry[maxx];
struct node
{
int left;
int right;
int mid;
int val;
} a[maxx*];
void pushup(int root)
{
a[root].val=a[root<<].val+a[root<<|].val;//把laze标记往上传递。不能是加等于,就是等于,因为底部被更新后,需要往上的是新的内容
}
void buildtree(int root,int l,int r)
{
int mid=(l+r)/;
a[root].left=l;
a[root].right=r;
a[root].mid=mid;
a[root].val=;
if(l==r)
{
a[root].val=arry[l];//到最低端的时候
return;
}
buildtree(root*,l,mid);
buildtree(root*+,mid+,r);
pushup(root);//把这个区间创建完成后,需要把更新往上更新
}
void updata(int root,int tag,int val)//单点更新
{
int l = a[root].left,r=a[root].right;
if(l==r)
{
a[root].val+=val;
return;
}
int mid=(l+r)/;
if(tag<=mid)updata(*root,tag,val);
else updata(root*+,tag,val);
pushup(root);
}
int query(int root,int ql,int qr)
{
int res=;
int l=a[root].left,r=a[root].right;
int mid=(l+r)/;
if(ql<=l && qr>=r)return a[root].val;//询问的区间是比这个区间大的,那么代表这个区间的内部的所有都要被选到,因此无需再往下遍历
if(ql<=mid)res+=query(root*,ql,qr);//询问的左区间比当前区间小,那么这个区间的左边有一部分取不到,因此需要继续往下找
if(qr>mid)res+=query(root*+,ql,qr);//询问的右区间比当前的右区间大,那么这个区间的右边有一部分取不到,因此也需要往下找
return res;//最后把这两边的内容传递回去即可
}
int main()
{
int t;
int n;
scanf("%d",&t);
char op[];
int pos,val;
int l,r;
int cas=;
while(t--)
{
scanf("%d",&n);
printf("Case %d:\n",++cas);
for (int i=; i<=n; i++)
{
scanf("%d",&arry[i]);
}
buildtree(,,n);
while(~scanf("%s",op))
{
if(op[]=='E')break;
if(op[]=='A')
{
scanf("%d%d",&pos,&val);
updata(,pos,val);
}
else if(op[]=='S')
{
scanf("%d%d",&pos,&val);
// cout<<"???"<<-val<<endl;
updata(,pos,-val);
}
else
{
scanf("%d%d",&l,&r);
printf("%d\n", query(,l,r));
}
} }
return ;
}

HDU - 1166 - 敌兵布阵 线段树的单点修改,区间求和的更多相关文章

  1. hdu 1166 敌兵布阵 (线段树、单点更新)

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

  2. HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)

    HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...

  3. hdu 1166 敌兵布阵 线段树 点更新

    // hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...

  4. HDU 1166 敌兵布阵(线段树单点更新,板子题)

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

  5. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

  6. HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>

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

  8. hdu 1166 敌兵布阵 线段树区间修改、查询、单点修改 板子题

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

  9. HDU 1166 敌兵布阵 线段树

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

随机推荐

  1. while 循环,存储过程

    1.while 循环 declare @ss intset @ss=2while @ss<10begin set @ss=@ss+1 print 'HELLO'+convert(char(10) ...

  2. python 函数参数为*和**的作用与区别

    def function(*args):print(args) 中*的作用:表示此时参数为一个元祖. def function(**args):print(args)中**的作用:表示此时参数为一个字 ...

  3. c/c++ 用前序和中序,或者中序和后序,创建二叉树

    c/c++ 用前序和中序,或者中序和后序,创建二叉树 用前序和中序创建二叉树 //用没有结束标记的char*, clr为前序,lcr为中序来创建树 //前序的第一个字符一定是root节点,然后去中序字 ...

  4. 安装window 7系统----计算机经验

    上期我们已经成功制作了U盘启动并且也成功进入了PE系统了,在PE微型系统中,除了简单的装系统来恢复C盘,还有什么功能你们可以使用的呢?如果这一期我没有把其他内容讲解的话,千万别乱搞,到时我可能会讲解几 ...

  5. python Docker 查看私有仓库镜像

      pip 安装: 首先安装epel扩展源: yum -y install epel-release 更新完成之后,就可安装pip: yum -y install python-pip 安装完成之后清 ...

  6. June 14. 2018 Week 24th Thursday

    Good friends, good books, and a sleepy conscience: this is the ideal life. 拥有益友.良书和一颗宁静的内心:这就是理想的生活. ...

  7. 关于LVS负载均衡tcp长连接分发的解决思路

    虽然应用keepalived搞定了后端服务负载均衡和高可用性问题,但是在具体应用的时候,还是要注意很多问题.很多应用都用tcp或者http的长连接,因为建立tcp连接或者http连接开销比较大,而应用 ...

  8. Git 安装及用法 github 代码发布 gitlab私有仓库的搭建

    版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 这个版本控制软件,有 svn还有git,是一个工具. git是由linux的作者开发的 git是一个分布式版本控制系统 ...

  9. maven项目引入依赖之后,jar包没有自动导入报错

    解决这个问题可run maven-intall 一下 ,需要在联网的情况下去下载jar包. 我这样做了一下就可以了.

  10. docker swarm:Error response from daemon: rpc error: code = Unavailable desc = grpc: the connection is unavailable

    环境:cetos7 描述:创建完docker swarm,想把node主机加入swarm中,执行以下命令时,报错 无法连接! 原因是:防火墙!!!!!!!没关!!!! 解决办法是:关闭防火墙