http://acm.hdu.edu.cn/showproblem.php?pid=1166

直接线段树模板
AC代码:
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4.  
  5. using namespace std;
  6.  
  7. struct node
  8. {
  9. int l; //左起点
  10. int r; //右终点
  11. int sum; //区间数据总和
  12. };
  13.  
  14. node p[200004];
  15. int a[50001];
  16. int n;
  17.  
  18. void biuld(int k, int l, int r) //创建
  19. {
  20. int mid;
  21. p[k].l = l;
  22. p[k].r = r;
  23. if(l == r)
  24. {
  25. p[k].sum = a[l];
  26. return ;
  27. }
  28. mid = (l+r)/2;
  29. biuld(k*2,l,mid);
  30. biuld(k*2+1,mid+1,r);
  31. p[k].sum = p[k*2].sum+p[k*2+1].sum;
  32. return ;
  33. }
  34.  
  35. int find(int k, int l, int r) //查找区间的值
  36. {
  37. int mid;
  38. if(p[k].l==l && p[k].r==r) //找到这个区间
  39. {
  40. return p[k].sum;
  41. }
  42. mid = (p[k].l+p[k].r)/2;
  43. if(l>mid) //在中点的右孩子
  44. {
  45. return find(k*2+1,l,r);
  46. }
  47. if(r<=mid) //在中点得左孩子
  48. {
  49. return find(k*2,l,r);
  50. }
  51. return find(k*2,l,mid) + find(k*2+1,mid+1,r);
  52. }
  53.  
  54. void update(int k, int x, int y) //更新数据
  55. {
  56. int mid;
  57. if(p[k].l==x && p[k].r==x) //如果找到这个点
  58. {
  59. p[k].sum = y; //更新数据
  60. return ;
  61. }
  62. mid = (p[k].l+p[k].r)/2;
  63. if(x<=mid)
  64. {
  65. update(k*2,x,y);
  66. }
  67. else
  68. {
  69. update(k*2+1,x,y);
  70. }
  71. p[k].sum=p[k*2].sum+p[k*2+1].sum;
  72. return ;
  73. }
  74.  
  75. int main()
  76. {
  77. int t,i,k,x,y,m;
  78. char cz[7];
  79. scanf("%d",&t);
  80. k = 0;
  81. while(t--)
  82. {
  83. k++;
  84. scanf("%d",&n);
  85. for(i = 1; i <= n; i++)
  86. {
  87. scanf("%d",&a[i]);
  88. }
  89. biuld(1,1,n);
  90. printf("Case %d:\n",k);
  91. while(1)
  92. {
  93. scanf("%s",&cz);
  94. if(cz[0]=='E')
  95. {
  96. break;
  97. }
  98. scanf("%d%d",&x,&y);
  99. switch(cz[0])
  100. {
  101. case 'Q':
  102. {
  103. printf("%d\n",find(1,x,y));
  104. break;
  105. }
  106. case 'A':
  107. {
  108. a[x]+=y;
  109. m = a[x];
  110. update(1,x,m);
  111. break;
  112. }
  113. case 'S':
  114. {
  115. a[x]-=y;
  116. m = a[x];
  117. update(1,x,m);
  118. }
  119. }
  120. }
  121. }
  122.  
  123. return 0;
  124. }

hdu 1166 敌兵布阵(线段树,树状数组)的更多相关文章

  1. HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)

    HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...

  2. hdu 1166 敌兵布阵 线段树 点更新

    // hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...

  3. HDU 1166 敌兵布阵(线段树单点更新,板子题)

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

  4. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

  5. HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>

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

  7. hdu 1166 敌兵布阵 (线段树、单点更新)

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

  8. hdu 1166 敌兵布阵 线段树区间修改、查询、单点修改 板子题

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

  9. HDU 1166 敌兵布阵 线段树

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

  10. HDU 1166 - 敌兵布阵 - [线段树][树状数组]

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

随机推荐

  1. mysql时间与字符串相互转换

    时间.字符串.时间戳之间的互相转换很常用,但是几乎每次使用时候都喜欢去搜索一下用法:本文整理一下三者之间的 转换(即:date转字符串.date转时间戳.字符串转date.字符串转时间戳.时间戳转da ...

  2. python中decorator

    先讲一下python中的@符号 看下面代码 @f @f2 def fun(args, args2, args3, args4, ……): pass 上面代码相当于 def fun(args, args ...

  3. 设计模式值六大原则——依赖倒置原则 (DIP)

    依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义: 高层模块不应该依赖底层模块,两者都应该依赖其抽象: 抽象不应该依赖细节: 细节应该依赖抽象. 依赖倒置 ...

  4. jQuery源码,匿名函数自执行

    jQuery框架的首尾是这样写的()(), (function(window){//这个window是个入参,随便起个名字都行 //这里面全都是js代码 })(window)//这个括号里的windo ...

  5. 使用JS进行pc端、手机端判断

     <script type="text/javascript">            (function(){                var ua = nav ...

  6. uva 11077 置换

    /** 给定一个置换,看能不能存在一个置换A^2 = B 思路; 循环节长度为偶数n的置换只能由循环节长度为长度2*n 的置换A*A 而变得.所以只需求出循环节,看循环节长度为偶数的个数是否为偶数个即 ...

  7. 转: sublime text 2 前端编码神器-快捷键与使用技巧介绍

    代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大.灵活的编辑器,相信你和我一样,都不会例外. 如果说 ...

  8. Qt5制作鼠标悬停显示Hint的ToolTip

    在日常生活中的使用的软件中,我们经常会遇到这样的情况. 我们在网页上,有些网页链接的文字(比如文章标题,知乎问题标题,百度的词条等)因为太长了,而显示不出来,但是鼠标悬停在上面的时候就可以显示出来.  ...

  9. 「操作系统」: Conditional Move Instructions(trap)

    Not all conditional expressions can be compiled using conditional moves. Most significantly, the abs ...

  10. fedora21 codeblocks在编辑装态下无法输入

    来自:http://forum.ubuntu.com.cn/viewtopic.php?f=88&t=284409   用codeblocks,突然发现怎么敲键盘都不能输入 搜索后得知: Co ...