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 ...
随机推荐
- [20181015]为什么是3秒.txt
[20181015]为什么是3秒.txt --//以前测试:连接http://blog.itpub.net/267265/viewspace-2144765/=>为什么是12秒.txt.--// ...
- linux安装教程
一.安装准备工作 虚拟机VMWARE10 镜像文件CentOs6.5 二.安装过程 1.启动VMWARE10,点击创建新的虚拟机. 2.选择典型安装即可 3.这里我们选择稍后再进行安装操作系统,因为这 ...
- 洗礼灵魂,修炼python(68)--爬虫篇—番外篇之webbrowser模块
题外话: 爬虫学到这里,我想你大部分的网站已经不再话下了对吧?有检测报文头的,我们可以伪造报文头为浏览器,有检测IP,我们可以用代理IP,有检测请求速度的,我们可以用time模块停顿一下,需要登录验证 ...
- Linux进程核心调度器之主调度器schedule--Linux进程的管理与调度(十九)
主调度器 在内核中的许多地方, 如果要将CPU分配给与当前活动进程不同的另一个进程, 都会直接调用主调度器函数schedule, 从系统调用返回后, 内核也会检查当前进程是否设置了重调度标志TLF_N ...
- 虚机抓取Hyper-V宿主的镜像流量(Windows Server 2012R2)
1.将交换机流量镜像到Hyper-V宿主的一块网卡(eth4) 2.在Hyper-V宿主上新建虚拟交换机(Network_Mirror),选择外部网络,扩展属性中启用“Microsoft NDIS捕获 ...
- NodeJS二进制包安装和快捷键配置(适用于U盘版安装配置)
首先下载NodeJS二进制安装包:https://nodejs.org/dist/v10.15.3/node-v10.15.3-win-x64.zip 在D盘新建NodeJS文件夹,解压node-v1 ...
- Shell编程基础知识(一)
一.基本的运行Linux程序的3种方法: (1) 使文件具有可执行权限,直接运行文件.eg: chmod a+x testfile.sh ./testfile.sh (2) 直接调用命令解释器来 ...
- IntelliJ IDEA 导入Spring源码
第一步: 使用git 拉取代码 git 命令: git init //创建git仓库 git clone https://github.com/spring-projects/spring-f ...
- [Java] SpringMVC工作原理之二:HandlerMapping和HandlerAdapter
一.HandlerMapping 作用是根据当前请求的找到对应的 Handler,并将 Handler(执行程序)与一堆 HandlerInterceptor(拦截器)封装到 HandlerExecu ...
- input accept属性限制文件上传格式
上传文件的类型:具体做法如下所示: 注意:accept属性可以限制上传格式,其有兼容性如下 <1>上传.csv格式的 <input text="file" acc ...