HDU1166:敌兵布阵(线段树以及单点更新)
来源:互联网 发布:数据分析职业发展 知乎 编辑:程序博客网 时间:2024/06/01 03:59
题意: 一个军队有一定数量的军营,这个军营是动态变化的,人数可多可少,经过一系列的操作,询问某个军营的人数。
输入: 第一行是T组数据,下一行有一个正整数N表示有N个军营。接下来进行操作:add i j表示在第i个军营增加j个士兵;
sub i j表示在第i个军营减少j个士兵;query i j表示查找第i个军营到第j个军营士兵的数目;end 表示结束输入
输出: 每一次query就输出当前区间内的士兵数目,注意输出格式。
这一题直接莽是肯定会wa的,因为多次的询问是肯定超时的。这里使用的是线段树来存贮数据的。
先介绍一下线段树:对于一个区间为1-10来说segTree所做的操作就是不停的二分,segTree这个结构体的下标代表了下图的圆圈序号。
这里需要说明的是,下面的24号节点之前没有23节点这是这种数据结构的规定,也就是说segtree这个结构中某些下标里的内容其实是空的。
ps:segtree[3]表示的是区间6-10的内容。
建立树的过程就在下面的代码里面。
修改的过程其实就是二分寻找适当的区间直接进行增减。修改的标志就是左区间和右区间完全重合。这里的递归过程希望能够理解,可以借助debug进行实时跟踪。
询问查找这部分的思想其实跟单点更新的思想差不多,不过需要注意的是因为求解和,所以如果查找的区间恰好在总区间的范围内时将此时的segtree[i]的两个子节点的nsum
进行相加操作。
(这一部分的内容借助debug可以直接发现这个数据结构究竟做了什么事,关键还是理解好这个结构体和数组之间的直接区别)
代码:
阅读全文
0 0
- HDU1166:敌兵布阵(线段树以及单点更新)
- HDU1166敌兵布阵(线段树单点更新)
- HDU1166:敌兵布阵(线段树单点更新)
- hdu1166 敌兵布阵 线段树,单点更新
- HDU1166 敌兵布阵 线段树 单点更新
- hdu1166 敌兵布阵 线段树 单点更新
- Hdu1166 敌兵布阵 线段树、单点更新
- HDU1166:敌兵布阵(线段树 单点更新)
- HDU1166:敌兵布阵(线段树单点更新)
- hdu1166敌兵布阵(线段树---单点更新,区间求值)
- hdu1166 敌兵布阵(线段树单点更新)
- 【单点更新,区间查询,线段树】【HDU1166】【敌兵布阵】
- 先冷静一下 线段树单点更新HDU1166 敌兵布阵
- HDU1166 敌兵布阵(线段树 单点更新 区间查询)
- hdu1166 敌兵布阵 线段树 单点更新区间查询
- hdu1166 敌兵布阵(树状数组 && 线段树单点更新)
- hdu1166 敌兵布阵 线段树单点更新+区间求和
- hdu1166 敌兵布阵(线段树经典的单点更新)
- 一份修改layui自定义验证信息的修改密码功能
- JVM的垃圾回收机制
- UVA 12538 Version Controlled IDE 可持久化平衡树 || rope
- 数据库的数据类型和数据表
- linux第一章作业
- HDU1166:敌兵布阵(线段树以及单点更新)
- jdbc连接数据库
- guava之Table
- 菜鸟学大型分布式网站心得(一)
- MDK+JLINK环境下LPC1857外扩SDRAM在线调试实现
- C++字符型指针无法输出的问题
- HTML转义字符大全 (换行,enter,所有特殊字符)
- hadoop2.7.3在集群中配置多个namenode(federation cluster)
- 17-9-29Unsupported major.minor version 52.0 报错处理方式