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 ...
随机推荐
- [20181220]使用提示OR_EXPAND优化.txt
[20181220]使用提示OR_EXPAND优化.txt --//链接http://www.itpub.net/thread-2107240-2-1.html,http://www.itpub.ne ...
- SQL Server基础之表级触发器
触发器分为两种,一种与数据表绑定,响应数据表指定动作(insert.delete或update),此处称为表级:一种与数据库本身绑定,响应数据定义语句(主要是CREATE.ALTER 和 DROP 开 ...
- 数据库之mysql篇(1)—— 数据库管理系统简介/mysql的安装、配置
说mysql之前,还是先说说数据库. 什么是数据库: 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后 ...
- Alwayson查询主副本不同的JOB,Linkserver,Login
DECLARE @SQL AS VARCHAR(5000), @Primary AS VARCHAR(50), @Secondy AS VARCHAR(50); SELECT @Primary='AA ...
- Linux CFS调度器之pick_next_task_fair选择下一个被调度的进程--Linux进程的管理与调度(二十八)
1. CFS如何选择最合适的进程 每个调度器类sched_class都必须提供一个pick_next_task函数用以在就绪队列中选择一个最优的进程来等待调度, 而我们的CFS调度器类中, 选择下一个 ...
- c/c++ 智能指针 shared_ptr 使用
智能指针 shared_ptr 使用 上一篇智能指针是啥玩意,介绍了什么是智能指针. 这一篇简单说说如何使用智能指针. 一,智能指针分3类:今天只唠唠shared_ptr shared_ptr uni ...
- c/c++ 线性表之顺序表
线性表之顺序表 存储在连续的内存空间,和数组一样. 下面的代码,最开始定义了一个能存8个元素的顺序表,当超过8个元素的时候,会再追加开辟空间(函数:reInit). 实现了以下功能: 函数 功能描述 ...
- 第九章 通过 SMB 共享虚拟机
自 Windows Server 2012 起,微软引入了 SMB 3.0 的概念,通过 SMB 3.0,可以实现很多新的功能,包括我们介绍过的"SMB 多通道",以及将虚拟机 ...
- php curl参数详解之post方法
利用记录的URL参数解释,写一个post方法: <?php function do_post($url, $data) { $ch = curl_init(); //设置CURLOPT_RETU ...
- Sublime Text 2 配置PHP调试环境(在windows环境下)
1:PHP安装,配置环境变量 PHP安装略过- 2:下载Sublime Text 2 下载地址:http://www.sublimetext.com/2 ,选择自己合适的版本 3:点击 sublime ...