敌兵布阵

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 114879    Accepted Submission(s): 48134

Problem Description
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。
中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:“Tidy,马上汇报第3个营地到第10个营地共有多少人!”Tidy就要马上开始计算这一段的总人数并汇报。但敌兵营地的人数经常变动,而Derek每次询问的段都不一样,所以Tidy不得不每次都一个一个营地的去数,很快就精疲力尽了,Derek对Tidy的计算速度越来越不满:"你个死肥仔,算得这么慢,我炒你鱿鱼!”Tidy想:“你自己来算算看,这可真是一项累人的工作!我恨不得你炒我鱿鱼呢!”无奈之下,Tidy只好打电话向计算机专家Windbreaker求救,Windbreaker说:“死肥仔,叫你平时做多点acm题和看多点算法书,现在尝到苦果了吧!”Tidy说:"我知错了。。。"但Windbreaker已经挂掉电话了。Tidy很苦恼,这么算他真的会崩溃的,聪明的读者,你能写个程序帮他完成这项工作吗?不过如果你的程序效率不够高的话,Tidy还是会受到Derek的责骂的.
Input
第一行一个整数T,表示有T组数据。
每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工兵营地里开始时有ai个人(1<=ai<=50)。
接下来每行有一条命令,命令有4种形式:
(1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30)
(2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30);
(3)Query i j ,i和j为正整数,i<=j,表示询问第i到第j个营地的总人数;
(4)End 表示结束,这条命令在每组数据最后出现;
每组数据最多有40000条命令
Output
对第i组数据,首先输出“Case i:”和回车,
对于每个Query询问,输出一个整数并回车,表示询问的段中的总人数,这个数保持在int以内。
Sample Input
1101 2 3 4 5 6 7 8 9 10Query 1 3Add 3 6Query 2 7Sub 10 2Add 6 3Query 3 10End
Sample Output
Case 1:63359

问题链接:HDU1166 敌兵布阵

问题描述:(略)

问题分析:这个问题用树状数组来解决,就是一个树状数组的裸体。

程序说明:(略)

参考链接:(略)

题记:(略)

AC的C++语言程序如下:

/* HDU1166 敌兵布阵 */#include <iostream>
#include <stdio.h>
#include <string.h>using namespace std;const int N = 50000;
int a[N + 1], n;
char cmd[8];int lowbit(int i)
{return i & -i;
}void update(int i, int v) //更新函数
{while(i <= n) {a[i] += v;i += lowbit(i);}
}int sum(int i)      //求和函数
{int sum = 0;while(i > 0) {sum += a[i];i -= lowbit(i);}return sum;
}int main()
{int t, caseno = 0, v1, v2;scanf("%d", &t);while(t--) {memset(a, 0, sizeof(a));scanf("%d", &n);for(int i = 1; i <= n; i++) {scanf("%d", &v1);update(i, v1);}printf("Case %d:\n", ++caseno);while(~scanf("%s", cmd)) {if(cmd[0] == 'E')break;scanf("%d%d", &v1, &v2);if(cmd[0] == 'A')update(v1, v2);else if(cmd[0] == 'S')update(v1, -v2);else if(cmd[0] == 'Q')printf("%d\n", sum(v2) - sum(v1 - 1));   // 用减法计算区间和}}return 0;
}

HDU1166 敌兵布阵【树状数组】相关推荐

  1. hdu1166敌兵布阵 树状数组裸题

    树状数组裸题 动态更新区间内的点,动态查询区间和 敌兵布阵 ac代码 #include<iostream> #include<algorithm> #include<cs ...

  2. 【 HDU 1166】 敌兵布阵 树状数组从0到1

    如果给你一个数组,让你求某个区间的和,你很自然会想到遍历一遍数组,复杂度是O(n),但是如果有多次询问呢,你也许会想到用前缀数组,通过O(n)的预处理,达到O(1)的查询,但是如果要更新某个元素的值呢 ...

  3. 杭电OJ 敌兵布阵 树状数组

    是一道简单的树状数组的题,,是一道简单题.....题目: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Der ...

  4. HDU 1166 敌兵布阵 树状数组小结(更新)

    树状数组(Binary Indexed Tree(BIT), Fenwick Tree) 是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有 元素之和,但是每次只能修改一 ...

  5. hdu 1166 敌兵布阵 树状数组

    敌兵布阵                                                                           Time Limit: 2000/1000 ...

  6. hdu 1166 敌兵布阵 树状数组 模板题

    这题是树状数组入门的一模板题,非常基础,被小白成为"赤裸裸"的入门题,哈哈,一个plus,一个sum全部搞定 #include<stdio.h> #include< ...

  7. 线段树递归和非递归实现+hdu1166 敌兵布阵

    递归代码: #include <string> #include <cstring> #include <iostream> #include <stdio. ...

  8. HDU1166 敌兵布阵(树状数组模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  9. hdu-1166敌兵布阵(树状数组)

    此处的树状数组讲解请点击:here~~~ #include<stdio.h> #include<string.h> int n,a[50005],q[40005]; int l ...

最新文章

  1. 北大电池新研究登上Nature:3万次循环测试,性能衰减不到30%,大幅提高锂空电池性能...
  2. Go 语言编程 — 项目布局规范
  3. Java中Integer和String浅谈
  4. 我的博客今天0岁346天了,我领取了…
  5. 【收集】11款Linux数据恢复工具
  6. php大马源码 手机网页,php大马源码:【百家号】脸书百科,分析 PHP大马-php_mof SHELL Web程序...
  7. bzoj1008: [HNOI2008]越狱
  8. 一位在项目上的好友求助
  9. 【Tensorflow深度学习】Tensorflow2.0GPU版极简安装
  10. java多线程的api_java多线程之:线程对象一些api
  11. c#求长方形的面积周长公式_长方形的面积和周长公式是什么?
  12. java 重量单位换算_JAVA中数据存储方式以及单位转换
  13. 基于单片机的智能花盆
  14. Java之对象转型(casting)
  15. 千兆网络PHY芯片 RTL8211E的实践应用(原理图及PCB实现)
  16. 华为5g cpe 虚拟服务器,购买华为5G CPE Pro 2之前你需要知道这些
  17. java_facade
  18. 国密:SM2公私钥加签验签
  19. Axure 8.0 授权码
  20. 徐工培训计算机,走进徐工,迈向成功——徐工数元教育2018大型培训纪实

热门文章

  1. 多线程写图像文件的一点小测试
  2. GeoTools——shp转geojson
  3. xlwings,让excel飞起来!
  4. Docker下ETCD集群搭建
  5. 百万 Go TCP 连接的思考: epoll方式减少资源占用
  6. 摆脱臃肿--Unity3D安卓包减肥秘笈
  7. pdf 深入理解kotlin协程_协程初探
  8. 【java学习之路】(java SE篇)(练习)常用类和异常的简单练习
  9. Python字符串有关的方法汇总
  10. Hadoop的map阶段流程