题目描述:
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,</

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

被折叠的 条评论
为什么被折叠?



