题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166

思路分析:该问题为动态连续和查询问题,使用数组数组可以解决;也可使用线段树解决该问题;

代码如下:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. const int MAX_N = + ;
  7. int c[MAX_N];
  8.  
  9. inline int Lowbit(int x) { return x & -x; }
  10. inline int Sum(int x)
  11. {
  12. int ret = ;
  13. while (x) {
  14. ret += c[x];
  15. x -= Lowbit(x);
  16. }
  17. return ret;
  18. }
  19.  
  20. inline void Add(int x, int d, int n)
  21. {
  22. while (x <= n) {
  23. c[x] += d;
  24. x += Lowbit(x);
  25. }
  26. }
  27.  
  28. int main()
  29. {
  30. int a = , b = , ans = , temp = ;
  31. int test_case = , case_id = , n = ;
  32. char command[];
  33.  
  34. scanf("%d", &test_case);
  35. while (test_case--) {
  36. scanf("%d", &n);
  37. memset(c, , sizeof(c));
  38. for (int i = ; i <= n; ++ i) {
  39. scanf("%d", &temp);
  40. Add(i, temp, n);
  41. }
  42. printf("Case %d:\n", ++case_id);
  43. while(scanf("%s", command) != EOF && command[] != 'E') {
  44. scanf("%d %d", &a, &b);
  45. if (command[] == 'Q') {
  46. ans = Sum(b) - Sum(a - );
  47. printf("%d\n", ans);
  48. } else if (command[] == 'A') {
  49. Add(a, b, n);
  50. } else {
  51. Add(a, -b, n);
  52. }
  53. }
  54. }
  55. return ;
  56. }

hdoj 1166 敌兵布阵(树状数组)的更多相关文章

  1. HDU 1166 敌兵布阵 树状数组||线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=1166 题目大意: 给定n个数的区间N<=50000,还有Q个询问(Q<=40000)求区间和. 每个 ...

  2. HDU 1166 敌兵布阵(树状数组)

    之前用过了线段树的做法,树状数组的也补上吧 #include<iostream> #include<cstdio> #include<cstring> using ...

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

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

  4. HDU1166 敌兵布阵(树状数组)

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  5. hdu1166 敌兵布阵 树状数组/线段树

    数列的单点修改.区间求和 树状数组或线段树入门题 #include<stdio.h> #include<string.h> ],N; void add(int x,int a) ...

  6. HDU 1166 敌兵布阵 (数状数组,或线段树)

    题意:... 析:可以直接用数状数组进行模拟,也可以用线段树. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000&quo ...

  7. hdu-1166 敌兵布阵---树状数组模板

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1166 题目大意: 维护动态的区间和,单点更新,就是模板题 #include<iostream& ...

  8. HDU-1166 敌兵布阵 (树状数组模板题——单点更新,区间求和)

    题目链接 AC代码: #include<iostream> #include<cstdio> #include<cstring> #include<algor ...

  9. 线段树(单点更新)/树状数组 HDOJ 1166 敌兵布阵

    题目传送门 /* 线段树基本功能:区间值的和,修改某个值 */ #include <cstdio> #include <cstring> #define lson l, m, ...

随机推荐

  1. 新视野OJ 2705 [SDOI2012]Longge的问题 (数论)

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2705 题解:求 sigma(gcd(i,n), 1<=i<=n<2^32) ...

  2. Windows phone 8.1 MessageBox 变了哦!

    using Windows.UI.Popups; public async void MessageBoxShow(string content, string caption) { MessageD ...

  3. Qt Style Sheet实践(一):按钮及关联菜单(24K纯开源,一共四篇)

    导读 正如web前端开发中CSS(Cascade Style Sheet)的作用一样,Qt开发中也可以使用修改版的QSS将逻辑业务和用户界面进行隔离.这样,美工设计人员和逻辑实现者可以各司其职而不受干 ...

  4. uber司机如何注册 uber司机详细注册流程

        注意:本文驾驶证行驶证图片为本人拍摄,请广大网友勿作它用 转载请修改! 详细的介绍注册优步uber司机端步骤; uber对司机的要求: 车辆为本地牌照 车龄在5年以内 裸车价格在10万以上 目 ...

  5. Matlab单元(Cell)数据的应用

    MATLAB里面的cell有的翻译为单元有的翻译为细胞型数据.它是MATLAB的一种特殊数据类型,可以将它看作是一种无所不包的广义矩阵.组成cell的元素可以是任何一种数据类型的常数或者常量,每一个元 ...

  6. java的抽象类

    现实世界中,人们表征世界时,会把现实世界中的很多类具有相同特征的事物归为一个抽象类.比如水果是许多植物果实的总称,我们可以定义一个苹果类.定义一个西瓜类,可以实例化一个苹果对象,可以实例化一个西瓜对象 ...

  7. swig模板 html代码自然状态下输出是转义的,必须加一个函数来转换为html代码;

    <div>{{o.content|raw}}</div> |raw 相当于一个函数,转义函数,最终输出结果为html代码:

  8. [poj 3159]Candies[差分约束详解][朴素的考虑法]

    题意 编号为 1..N 的人, 每人有一个数; 需要满足 dj - di <= c 求1号的数与N号的数的最大差值.(略坑: 1 一定要比 N 大的...difference...不是" ...

  9. linux 下手动编译安装无线网卡驱动

    先参照 <本地yum源安装GCC >安装好gcc hp的笔记本上安装了CentOS6.3,没有安装无线网卡驱动,安装这个驱动,在Google上找了好多资料,最后终于解决了这个问题.在这里做 ...

  10. loadRunner 11.0 安装及破解

    http://jingyan.baidu.com/article/20095761b31b58cb0621b463.html 破解时必须是管理员账户登录.