2015-06-08

问题简述:

  原题的题意相当于有一些连续摆放的箱子,里面装着球,球的数量可以加减,现要查询几个连续的箱子里球的总数,其中存在放球和拿球的操作。

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

解题思路:

  查询区间和的问题,可以使用线段树。

  最初的输入相当于构建线段树的过程;每一次的加减相当于对线段树进行更新;最后使用线段树的查询区间和算法直接得出答案。

源代码:

  1. /*
  2. OJ: HDOJ
  3. ID: forever
  4. TASK: 1166.敌兵布阵
  5. LANG: C++
  6. NOTE: 线段树
  7. */
  8. #include <cstdio>
  9.  
  10. const int MAX=;
  11. int a[MAX];
  12. char str[];
  13.  
  14. void build(int l,int r,int flag) {
  15. if(l==r) {
  16. scanf("%d",&a[flag]);
  17. return;
  18. }
  19. int m=(l+r)/;
  20. build(l,m,flag*);
  21. build(m+,r,flag*+);
  22. a[flag]=a[flag*]+a[flag*+];
  23. }
  24.  
  25. void update(int x,int y,int l,int r,int flag) {
  26. if(l==r) {
  27. a[flag]+=y;
  28. return;
  29. }
  30. int m=(l+r)/;
  31. if(x<=m)
  32. update(x,y,l,m,flag*);
  33. else
  34. update(x,y,m+,r,flag*+);
  35. a[flag]=a[flag*]+a[flag*+];
  36. }
  37.  
  38. int query(int x,int y,int l,int r,int flag) {
  39. if(x<=l&&r<=y)
  40. return a[flag];
  41. int m=(l+r)/;
  42. int ans=;
  43. if(x<=m)
  44. ans+=query(x,y,l,m,flag*);
  45. if(y>m)
  46. ans+=query(x,y,m+,r,flag*+);
  47. return ans;
  48. }
  49.  
  50. int main()
  51. {
  52. int t,n,x,y,k=;
  53. scanf("%d",&t);
  54. while(t--) {
  55. scanf("%d",&n);
  56. build(,n,);
  57. printf("Case %d:\n",k++);
  58. while(scanf("%s",str)&&str[]!='E') {
  59. scanf("%d %d",&x,&y);
  60. if(str[]=='Q')
  61. printf("%d\n",query(x,y,,n,));
  62. else if(str[]=='A')
  63. update(x,y,,n,);
  64. else if(str[]=='S')
  65. update(x,-y,,n,);
  66. }
  67. }
  68. return ;
  69. }

HDOJ 1166.敌兵布阵的更多相关文章

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

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

  2. hdoj 1166 敌兵布阵【线段树求区间最大值+单点更新】

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

  3. hdoj 1166 敌兵布阵 线段数和树状数组

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

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

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 思路分析:该问题为动态连续和查询问题,使用数组数组可以解决:也可使用线段树解决该问题: 代码如下 ...

  5. HDOJ 1166 敌兵布阵 (线段树)

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

  6. HDOJ(HDU).1166 敌兵布阵 (ST 单点更新 区间求和)

    HDOJ(HDU).1166 敌兵布阵 (ST 单点更新 区间求和) 点我挑战题目 题意分析 根据数据范围和询问次数的规模,应该不难看出是个数据结构题目,题目比较裸.题中包括以下命令: 1.Add(i ...

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

    题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    ...

  8. hdu acm 1166 敌兵布阵 (线段树)

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

  9. hud 1166 敌兵布阵

    http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

随机推荐

  1. MFC上下浮动与渐入渐出消息提示框实现

    类似QQ与360软件,消息提示有两种.上下浮动.渐入渐出. 1.上下浮动提示框实现 机制,定时器响应上下浮动消息. 主要API:MoveWindow. 源码如下UpDownTipDlg.h.UpDow ...

  2. poj2017简单题

    #include <stdio.h> #include <stdlib.h> int main() { int n,i; while(scanf("%d", ...

  3. ubuntu15.04下编译 libvirt

    很久没有编译 libvirt了. 工作需要,重新编译. [org_ref]: http://libvirt.org/compiling.html 很简单. 编译过程, 还是很多问题. 依赖包(给懒人参 ...

  4. 茴香豆的第五种写法---设置ExpandableListView系统自带图标按下效果

    1 编写groupindicator_selector.xml如下: <?xml version="1.0" encoding="utf-8"?> ...

  5. CSS样式表初始化代码

    CSS为什么要初始化?建站老手都知道,这是为了考虑到浏览器的兼容问题,其实不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面差异.当然,初始化样式会对SEO有一定的影 ...

  6. matlab GUI之常用对话框(二)-- 进度条的使用方法

    常用对话框(二) 进度条   waitbar 调用格式: h = waitbar(x,'message')  waitbar(x,'message','CreateCancelBtn','button ...

  7. OC 中的block使用

    在iOS的开发过程中,使用块的地方很多也很方便,但是在使用块的过程中要注意内存泄露的问题. 在块创建的时候,会对块内的所有对象的引用计数加一,直到块销毁,所以在使用块的过程中需要我们进行处理,在这里以 ...

  8. jvm栈和堆详解

    Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...

  9. 红豆带你从零学C#系列之:开始C#编程(一)

    让我们开始学习C#编程吧 作者:红豆西米露 交流QQ:937802080 前面的文章里给大家介绍了C#语言的一些基本认识,现在我们来开始做一个小程序吧! 在这里以我们以“控制台应用程序”来作演示. P ...

  10. linux杂记(十一)Bash Shell的使用环境

    Bash Shell使用环境 Bash Shell使用环境 1.登录讯息显示数据:/etc/issue,/etc/motd 我们在终端机接口(tty1~tty6)登入的时候,会有几行提示的字符串,那个 ...