敌兵布阵(HDU1166)线段树单点更新、区间查询

本文介绍了一种使用线段树解决包含点更新和区间查询问题的方法。通过具体实例详细展示了如何构建线段树、更新节点值及进行区间查询操作。

题目描述:
A国在边境线设置N个兵营。C国通过先进的的手段对A国的每个兵营的人数都掌握的一清二楚。每个兵营可以增加人数或减少人数。

输入:
第一行包含一个整数T,表示有T组测试数据。每组数据的第一行都包含一个整数N(N≤50000),表示有N个兵营。接下来有N个正整数,第i个整数ai表示第i个兵营的人数(1≤ai≤50)。再接下来每行都有一个命令,每组数据最多有40000条命令,命令有4种形式:
(1)Add i j,表示在第i个兵营增加j个人(j ≤30)。
(2)Sub i j,表示在第i个兵营减少j个人(j ≤30)。
(3)Query i j,i ≤ j,表示查询第i~j个营地的总人数;
(4)End,表示结束,在每组数据的最后出现。

输出:
对第i组数据,首先单行输出“Case i:”,然后对每个Query都单行输出查询区间的总人数。

输入样例: 3
1
10
1 2 3 4 5 6 7 8 9 10
Query 1 3
Add 3 6
Query 2 7
Sub 10 2
Add 6 3
Query 3 10
End
输出样例:
Case 1:
6
33
59
题解:本题包括点更新和区间查询,可以采用线段数组解决。

#include<cstdio>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int maxn=55555;
int sum[maxn<<2];

void PushUP(int rt){
   
   //更新和值
    sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}

void build(int l,</
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值