HDU - 1166 - 敌兵布阵 线段树的单点修改,区间求和
#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 - 敌兵布阵 线段树的单点修改,区间求和的更多相关文章
- hdu 1166 敌兵布阵 (线段树、单点更新)
敌兵布阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- hdu 1166 敌兵布阵 线段树 点更新
// hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...
- HDU 1166 敌兵布阵(线段树单点更新,板子题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1166 敌兵布阵(线段树单点更新)
敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...
- HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1166 敌兵布阵 线段树区间修改、查询、单点修改 板子题
题目链接:敌兵布阵 题目: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视 ...
- HDU 1166 敌兵布阵 线段树
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
随机推荐
- JSF中run项目时候Tomcat8启动不了的一种方法
把另一个博客内容迁移到这 我的问题是Tomcat是可以启动的 但是run那个jsp的时候 七月 10, 2016 3:14:54 下午 org.apache.tomcat.util.digester. ...
- [20181219]script使用小技巧.txt
[20181219]script使用小技巧.txt --//前几天在使用strace时遇到问题,它的输出使用标准错误句柄.--//我在想平时使用sqlplus如果输出字段很多,屏幕看起来一片混乱.-- ...
- ajax调用WebService实现数据库操作
首先说下测试环境和思路: 前端收集数据转换成json格式传输到后端,处理并存入数据库 1.数据库操作: [WebMethod] public string InsertPoint(string dat ...
- Windows Server 2016-管理站点复制(一)
可以使用Active Directory站点和服务管理单元来管理实现站点间复制拓扑的特定于站点的对象.这些对象存储在Active Directory域服务 (AD DS) 的站点容器中.同一个站点内的 ...
- 如何激活windows或office
郑重承诺:该激活软件没有病毒,有任何侵害行为,找我QQ:122317653 Step one: 首先你需要安装KMS Auto Net激活器,但我们都知道一些杀毒软件都会将此类激活器警告成木马病毒,原 ...
- 【算法】LeetCode算法题-Count And Say
这是悦乐书的第153次更新,第155篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第12题(顺位题号是38).count-and-say序列是整数序列,前五个术语如下: ...
- 汲取营养的blog专栏
网路上博客专栏是学习提升.思考深化的好途径,目前发现的博客价值高的平台: (1)EETOP www.eetop.cn (2)CSND www.csdn.net (3)cnblog www.cnblog ...
- JavaScript数组对象详情
Array 数组概述 Array 类型是 ECMAScript 最常用的类型.javaScript 中的 Array 类型和其他语言中的数组有着很大的区别. 虽然数组都是有序排列,但 javaScri ...
- 【Vuex】mapGetters 辅助函数
mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性: import { mapGetters } from 'vuex' export default { // ...
- 编写第一个 Shell 脚本
什么是 Shell 脚本? 一个 shell 脚本就是一个包含一系列命令的文件.shell 读取这个文件,然后执行 文件中的所有命令,就好像这些命令已经直接被输入到了命令行中一样. 怎样编写一个 Sh ...