`

hdu 1166 敌兵布阵(用树状数组)

阅读更多

敌兵布阵

      仍然是敌兵布阵那题,题目大意:给你一串数,然后会根据题意选择一点增加或减少,或者询问某区间的人数有多少?之前用线段树写了,而这题可以用树状树状来做,更加方便更加快速。

说下树状数组的三个主要函数:(神一样的函数,不只这些用处!!!)

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;
}
 
2
6
分享到:
评论
3 楼 panyanyany 2011-08-07  
神啊,大神啊!膜拜大神啊!
2 楼 sgeteternal 2011-08-07  
爽+1
1 楼 基德KID.1412 2011-08-07  

相关推荐

    【题解】「HDU1166」敌兵布阵(线段树)

    题面 【题目描述】 有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 acm1166线段树

    hdu 1166线段树代码

    树状数组(Binary Indexed Tree)

    - **解法**:可以考虑使用树状数组来维护区间内的最值,通过低比特操作实现高效更新和查询。 7. **二维树状数组 POJ2155:Matrix** - **题意**:给定一个n*n的矩阵,支持对子矩阵进行翻转操作,并查询特定位置的...

    hdu 1166线段树

    标题与描述均提到了“hdu 1166线段树”,这表明文章的核心是关于线段树在解决特定问题中的应用。线段树是一种数据结构,主要用于处理区间查询和更新操作,尤其是在大规模数据集上。在本例中,通过分析给定的部分代码...

    HH神总结的线段树专辑-超经典的

    - 示例题目包括 `hdu1166敌兵布阵` 和 `hdu1754IHateIt`。 - **`hdu1166敌兵布阵`**: - **题意**:给出一个整数序列,支持两种操作:增加某个位置上的数值以及查询某区间内的数值之和。 - **思路**:利用线段...

    HDU题目java实现

    【标题】"HDU题目java实现"所涉及的知识点主要集中在使用Java编程语言解决杭州电子科技大学(HDU)在线评测系统中的算法问题。HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案...

    hdu.rar_hdu

    3. **数据结构**:数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图(邻接矩阵、邻接表、最小生成树、拓扑排序等)。 4. **字符串处理**:KMP算法、Manacher's Algorithm、Rabin-Karp算法等。 5. **...

    hdu1250高精度加法

    ### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

    HDU DP动态规划

    总的来说,"HDU DP动态规划"是一个关于使用动态规划解决HDU平台上某一题目的主题,它要求掌握动态规划的基本概念、方法,并能灵活应用到实际问题中,同时可能涉及到文件交互和调试,以完成问题的求解。

    hdu 的2072,2084,2082,1170,ac代码

    在本题中,编写者首先利用`sscanf`函数从输入中读取字符串,并使用空格作为单词的分隔符,然后将读取到的单词存储在一个字符数组中。接着,通过遍历数组,通过特定的数据结构(如哈希表)来判断并去除重复的单词,...

    hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj

    【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...

    ACM HDU题目分类

    ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。这些分类将有助于编程选手更好地理解和解决问题。 DP 问题 DP(Dynamic Programming,动态规划)是一种非常重要...

    ACM hdu 线段树题目+源代码

    线段树是一种树形结构,它将一个数组分割成多个小 区间,每个区间对应树上的一个节点。线段树的每个节点都包含了该节点对应的区间信息。 线段树的主要应用 线段树的主要应用是解决区间问题,例如区间和、区间...

    杭电ACMhdu1163

    2. **数据结构**:常用的数据结构包括数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图等,对于不同的问题,选择合适的数据结构能有效提高解题效率。 3. **字符串处理**:杭电ACM中的题目可能涉及到...

    Hdu1000—2169部分代码

    HDU是杭州电子科技大学(Hangzhou Dianzi University)举办的一个在线编程竞赛平台,全称为HDU Online Judge。ACM是国际大学生程序设计竞赛(International Collegiate Programming Contest)的缩写,是一个全球性的...

    hdu动态规划算法集锦

    根据提供的信息,我们可以总结出以下关于“hdu动态规划算法集锦”的知识点: ### 动态规划基础概念 动态规划是一种解决多阶段决策问题的方法,它通过将原问题分解为互相重叠的子问题,利用子问题的解来构建原问题...

    HDU1059的代码

    HDU1059的代码

    HDU acm-PPT课件

    数据结构是ACM竞赛中的核心部分,包括数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图(图的遍历、最短路径等)等。熟练掌握这些数据结构的实现与操作,能帮助解决复杂问题。例如,二分查找可以快速...

    hdu1001解题报告

    hdu1001解题报告

Global site tag (gtag.js) - Google Analytics