HDU1166 敌兵布阵【树状数组】
敌兵布阵
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 114879 Accepted Submission(s): 48134
中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:“Tidy,马上汇报第3个营地到第10个营地共有多少人!”Tidy就要马上开始计算这一段的总人数并汇报。但敌兵营地的人数经常变动,而Derek每次询问的段都不一样,所以Tidy不得不每次都一个一个营地的去数,很快就精疲力尽了,Derek对Tidy的计算速度越来越不满:"你个死肥仔,算得这么慢,我炒你鱿鱼!”Tidy想:“你自己来算算看,这可真是一项累人的工作!我恨不得你炒我鱿鱼呢!”无奈之下,Tidy只好打电话向计算机专家Windbreaker求救,Windbreaker说:“死肥仔,叫你平时做多点acm题和看多点算法书,现在尝到苦果了吧!”Tidy说:"我知错了。。。"但Windbreaker已经挂掉电话了。Tidy很苦恼,这么算他真的会崩溃的,聪明的读者,你能写个程序帮他完成这项工作吗?不过如果你的程序效率不够高的话,Tidy还是会受到Derek的责骂的.
每组数据第一行一个正整数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条命令
对于每个Query询问,输出一个整数并回车,表示询问的段中的总人数,这个数保持在int以内。
问题链接: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 敌兵布阵【树状数组】相关推荐
- hdu1166敌兵布阵 树状数组裸题
树状数组裸题 动态更新区间内的点,动态查询区间和 敌兵布阵 ac代码 #include<iostream> #include<algorithm> #include<cs ...
- 【 HDU 1166】 敌兵布阵 树状数组从0到1
如果给你一个数组,让你求某个区间的和,你很自然会想到遍历一遍数组,复杂度是O(n),但是如果有多次询问呢,你也许会想到用前缀数组,通过O(n)的预处理,达到O(1)的查询,但是如果要更新某个元素的值呢 ...
- 杭电OJ 敌兵布阵 树状数组
是一道简单的树状数组的题,,是一道简单题.....题目: C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Der ...
- HDU 1166 敌兵布阵 树状数组小结(更新)
树状数组(Binary Indexed Tree(BIT), Fenwick Tree) 是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有 元素之和,但是每次只能修改一 ...
- hdu 1166 敌兵布阵 树状数组
敌兵布阵 Time Limit: 2000/1000 ...
- hdu 1166 敌兵布阵 树状数组 模板题
这题是树状数组入门的一模板题,非常基础,被小白成为"赤裸裸"的入门题,哈哈,一个plus,一个sum全部搞定 #include<stdio.h> #include< ...
- 线段树递归和非递归实现+hdu1166 敌兵布阵
递归代码: #include <string> #include <cstring> #include <iostream> #include <stdio. ...
- HDU1166 敌兵布阵(树状数组模板题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu-1166敌兵布阵(树状数组)
此处的树状数组讲解请点击:here~~~ #include<stdio.h> #include<string.h> int n,a[50005],q[40005]; int l ...
最新文章
- 北大电池新研究登上Nature:3万次循环测试,性能衰减不到30%,大幅提高锂空电池性能...
- Go 语言编程 — 项目布局规范
- Java中Integer和String浅谈
- 我的博客今天0岁346天了,我领取了…
- 【收集】11款Linux数据恢复工具
- php大马源码 手机网页,php大马源码:【百家号】脸书百科,分析 PHP大马-php_mof SHELL Web程序...
- bzoj1008: [HNOI2008]越狱
- 一位在项目上的好友求助
- 【Tensorflow深度学习】Tensorflow2.0GPU版极简安装
- java多线程的api_java多线程之:线程对象一些api
- c#求长方形的面积周长公式_长方形的面积和周长公式是什么?
- java 重量单位换算_JAVA中数据存储方式以及单位转换
- 基于单片机的智能花盆
- Java之对象转型(casting)
- 千兆网络PHY芯片 RTL8211E的实践应用(原理图及PCB实现)
- 华为5g cpe 虚拟服务器,购买华为5G CPE Pro 2之前你需要知道这些
- java_facade
- 国密:SM2公私钥加签验签
- Axure 8.0 授权码
- 徐工培训计算机,走进徐工,迈向成功——徐工数元教育2018大型培训纪实