敌兵布阵
仍然是敌兵布阵那题,题目大意:给你一串数,然后会根据题意选择一点增加或减少,或者询问某区间的人数有多少?之前用线段树写了,而这题可以用树状树状来做,更加方便更加快速。
说下树状数组的三个主要函数:(神一样的函数,不只这些用处!!!)
1.lowbit(int i)
2.update(int i, int x)
3.sum(int i)
代码:
#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std;
int n, a[50005];
char sh[15];
int lowbit(int i) //树状数组最巧妙之处:i&(-i)
{
return i&(-i);
}
void update(int i, int val) //更新函数
{
while(i <= n)
{
a[i] += val;
i += lowbit(i);
}
}
int sum(int i) //求和函数
{
int sum = 0;
while(i > 0)
{
sum += a[i];
i -= lowbit(i);
}
return sum;
}
int main()
{
int i, val, t, x, y, zz = 1;
scanf("%d", &t);
while(t--)
{
memset(a, 0, sizeof(a));
scanf("%d", &n);
for(i = 1; i <= n; i++)
{
scanf("%d", &val);
update(i, val);
}
printf("Case %d:\n", zz++);
while(scanf("%s", sh))
{
if(sh[0] == 'E') break;
scanf("%d %d", &x, &y);
if(sh[0] == 'A') update(x, y);
else if(sh[0] == 'S') update(x, -y);
else printf("%d\n", sum(y)-sum(x-1)); //两段区间和相减
}
}
return 0;
}
分享到:
相关推荐
题面 【题目描述】 有nnn个营地,已知每个营地的人数,有四条命令: (1)Add(1) Add(1)Add iii jjj,iii和jjj为正整数,表示第iii个营地增加jjj个人(jjj不超过303030) (2)Sub(2)Sub(2)Sub iii jjj ,iii和jjj为正...
hdu 1166线段树代码
- **解法**:可以考虑使用树状数组来维护区间内的最值,通过低比特操作实现高效更新和查询。 7. **二维树状数组 POJ2155:Matrix** - **题意**:给定一个n*n的矩阵,支持对子矩阵进行翻转操作,并查询特定位置的...
标题与描述均提到了“hdu 1166线段树”,这表明文章的核心是关于线段树在解决特定问题中的应用。线段树是一种数据结构,主要用于处理区间查询和更新操作,尤其是在大规模数据集上。在本例中,通过分析给定的部分代码...
- 示例题目包括 `hdu1166敌兵布阵` 和 `hdu1754IHateIt`。 - **`hdu1166敌兵布阵`**: - **题意**:给出一个整数序列,支持两种操作:增加某个位置上的数值以及查询某区间内的数值之和。 - **思路**:利用线段...
【标题】"HDU题目java实现"所涉及的知识点主要集中在使用Java编程语言解决杭州电子科技大学(HDU)在线评测系统中的算法问题。HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案...
3. **数据结构**:数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图(邻接矩阵、邻接表、最小生成树、拓扑排序等)。 4. **字符串处理**:KMP算法、Manacher's Algorithm、Rabin-Karp算法等。 5. **...
### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...
【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...
总的来说,"HDU DP动态规划"是一个关于使用动态规划解决HDU平台上某一题目的主题,它要求掌握动态规划的基本概念、方法,并能灵活应用到实际问题中,同时可能涉及到文件交互和调试,以完成问题的求解。
在本题中,编写者首先利用`sscanf`函数从输入中读取字符串,并使用空格作为单词的分隔符,然后将读取到的单词存储在一个字符数组中。接着,通过遍历数组,通过特定的数据结构(如哈希表)来判断并去除重复的单词,...
【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...
ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。这些分类将有助于编程选手更好地理解和解决问题。 DP 问题 DP(Dynamic Programming,动态规划)是一种非常重要...
线段树是一种树形结构,它将一个数组分割成多个小 区间,每个区间对应树上的一个节点。线段树的每个节点都包含了该节点对应的区间信息。 线段树的主要应用 线段树的主要应用是解决区间问题,例如区间和、区间...
2. **数据结构**:常用的数据结构包括数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图等,对于不同的问题,选择合适的数据结构能有效提高解题效率。 3. **字符串处理**:杭电ACM中的题目可能涉及到...
HDU是杭州电子科技大学(Hangzhou Dianzi University)举办的一个在线编程竞赛平台,全称为HDU Online Judge。ACM是国际大学生程序设计竞赛(International Collegiate Programming Contest)的缩写,是一个全球性的...
根据提供的信息,我们可以总结出以下关于“hdu动态规划算法集锦”的知识点: ### 动态规划基础概念 动态规划是一种解决多阶段决策问题的方法,它通过将原问题分解为互相重叠的子问题,利用子问题的解来构建原问题...
HDU1059的代码
数据结构是ACM竞赛中的核心部分,包括数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图(图的遍历、最短路径等)等。熟练掌握这些数据结构的实现与操作,能帮助解决复杂问题。例如,二分查找可以快速...
hdu1001解题报告