hdu 1166 敌兵布阵(线段树详解)
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std; struct node //用结构体来构建一个线段树
{
int l;//左区间值,此题代表营号
int r;//右区间值,同上
int n;//值,此题代表第l个到第r个营地的总人数
} t[];//线段树的下标 void build(int l,int r,int k)//构建线段树,应用递归思想~
{
if(r==l)//左右区间值相等,此题代表单个营号
{
t[k].l=l;
t[k].r=r;
t[k].n=;//初始化,因为还没有输入营地人数
return ;//递归出口
}
t[k].l=l; // 写入第k个结点中的 左区间
t[k].r=r; // 写入第k个结点中的 右区间
t[k].n=; //初始化
int mid=(r+l)/;//将区间一分为二,这里是二分思想
build(l,mid,*k);//该结点往 左孩子的方向 继续建立线段树
build(mid+,r,*k+);// 该结点往 右孩子的方向 继续建立线段树
} void insert(int n,int d,int k)//单点更新线段树,此题的意思是改变营地人数
{
//n是变化的人数,d是营号,k=1,记住是从根本开始(递归
if(t[k].l==t[k].r&&t[k].l==d)//找到该营地
{
t[k].n+=n;//更新单点,即变化人数
return ;
}
int mid=(t[k].l+t[k].r)/;//一分为二
if(d<=mid) insert(n,d,*k);//如果营号是在左区间里,向左侧递归变化
else insert(n,d,*k+);//如果营号是在右区间里,向右侧递归变化
t[k].n=t[*k].n+t[*k+].n;//更新所有区间里值,即从下往上改变人数
} int ans; void search(int a,int b,int k)//区间查找
{
if(t[k].l==a&&t[k].r==b)//找到区间
{
ans+=t[k].n;//由于会出现区间在树中不连续,即区间被mid截断
return ;
}
int mid=(t[k].l+t[k].r)/;
if(b<=mid) search(a,b,*k);//查询区间被[L,Mid]包含,此时直接在左边查找[a,b]
else if(a>mid) search(a,b,*k+);//查询区间被[mid,r]包含,此时直接在右查找[a,b]
else//区间被mid截断
{
search(a,mid,*k);//分开查找!
search(mid+,b,*k+);
}
} int main()
{
int c,n,a,b;
char ch[];
scanf("%d",&c);
for(int m=;m<=c;m++)
{
scanf("%d",&n);
build(,n,);
int num;
for(int i=;i<=n;i++)
{
scanf("%d",&num);
insert(num,i,);
}
printf("Case %d:\n",m);
while(scanf("%s",ch),strcmp(ch,"End"))
{
scanf("%d%d",&a,&b);
if(strcmp(ch,"Add")==) insert(b,a,);
else if(strcmp(ch,"Sub")==) insert(-b,a,);
else
{
ans=;
search(a,b,);
printf("%d\n",ans);
}
}
}
return ;
}
hdu 1166 敌兵布阵(线段树详解)的更多相关文章
- 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 敌兵布阵 (线段树、单点更新)
敌兵布阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- 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 ...
随机推荐
- Linux常用命令汇总及使用方法(一)
最近开始学习Linux,但是因为原来没有接触过,所有现在先将Linux中常用的命令记录下来,方便自己后期使用. 1.登陆 通过secureCRT/xshell/ssh等软件远程登陆Linux (1)# ...
- NS_ASSUME_NONNULL_BEGIN 延伸
NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END 在.h文件中,可以看到这两个宏,翻看定义,这两个宏的代码是 #define NS_ASSUME_NONNUL ...
- 成为java高手的八大条件
1.扎实的基础 数据结构.离散数学.编译原理,这些是所有计算机科学的基础,如果不掌握它们,很难写出高水平的程序.程序人人都会写,但当你发现写到一定程度很难再提高 的时候,就应该想想是不是要回过头来学 ...
- Jmeter:相应断言介绍
Jmeter进行性能测试时,作为对上一个请求返回信息的校验,基本上断言是不可少的,今天主要介绍一下Jmeter的相应断言校验. 相应断言:即对服务器相应信息的校验判断,发送http请求后,对服务器返回 ...
- UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 26269: illegal multibyte sequence
解决方法参见下面的链接: http://blog.csdn.net/jim7424994/article/details/22675759
- Office在线预览及PDF在线预览的实现方式大集合
一.服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览 微软方:利用Office2007以上版本的一个PDF插件SaveAsPDFandXPS.exe可以导出PDF文件,然后再利用免 ...
- 1、IO输入&输出流 简介
IO流的分类: * 流向: * 输入流 读取数据 * 输出流 写出数据 * 数据类型: * 字节流 * 字节输入流 读取数据 InputStream * 字节输出流 写出数据 OutputStream ...
- 《JS权威指南学习总结--第五章语句》
内容要点: 一.throw语句 所谓异常是当发生了某种异常情况或错误时产生的一个信号. 抛出异常就是用信号通知发生了错误或异常状况. 捕获异常时指处理这个信号,即采取必要的手段 ...
- nginx读取图片没有权限
场景是这样的,我们项目中上传图片到linux服务器后,保存图片存储路径和网络访问路径.app中用数据库返回的 图片访问路径来访问图片(nginx通过nfs方式读取图片).但是访问不到.要手动 chmo ...
- Implementing a builder: Zero and Yield
原文地址:http://fsharpforfunandprofit.com/posts/computation-expressions-builder-part1/ 前面介绍了bind和continu ...