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

题意分析

加深理解,重写一遍

代码总览

  1. #include <bits/stdc++.h>
  2. #define nmax 100000
  3. using namespace std;
  4. struct Tree{
  5. int l,r,val;
  6. int lazy;
  7. int mid(){
  8. return (l+r)>>1;
  9. }
  10. };
  11. Tree tree[nmax<<2];
  12. int num[nmax<<2];
  13. void PushUp(int rt)
  14. {
  15. tree[rt].val = tree[rt<<1].val + tree[rt<<1|1].val;
  16. }
  17. void Build(int l, int r, int rt)
  18. {
  19. tree[rt].l = l; tree[rt].r = r;
  20. tree[rt].val = tree[rt].lazy = 0;
  21. if(l == r){
  22. tree[rt].val = num[l];
  23. return;
  24. }
  25. Build(l,tree[rt].mid(),rt<<1);
  26. Build(tree[rt].mid()+1,r,rt<<1|1);
  27. PushUp(rt);
  28. }
  29. void UpdatePoint(int val, int pos, int rt)
  30. {
  31. if(tree[rt].l == tree[rt].r){
  32. tree[rt].val+=val;
  33. return;
  34. }
  35. if(pos<= tree[rt].mid()) UpdatePoint(val,pos,rt<<1);
  36. else UpdatePoint(val,pos,rt<<1|1);
  37. PushUp(rt);
  38. }
  39. int Query(int l,int r,int rt)
  40. {
  41. if(l>tree[rt].r || r<tree[rt].l) return 0;
  42. if(l <= tree[rt].l && tree[rt].r <= r) return tree[rt].val;
  43. return Query(l,r,rt<<1) + Query(l,r,rt<<1|1);
  44. }
  45. int T,N,a,b;
  46. char op[10];
  47. int main()
  48. {
  49. //freopen("in.txt","r",stdin);
  50. scanf("%d",&T);
  51. for(int i = 1;i<=T;++i){
  52. printf("Case %d:\n",i);
  53. scanf("%d",&N);
  54. for(int j = 1;j<=N;++j) scanf("%d",&num[j]);
  55. Build(1,N,1);
  56. while(scanf(" %s",op) && op[0] != 'E'){
  57. scanf("%d %d",&a,&b);
  58. if(op[0] == 'Q'){
  59. printf("%d\n",Query(a,b,1));
  60. }else if(op[0] == 'A'){
  61. UpdatePoint(b,a,1);
  62. }else{
  63. UpdatePoint(-b,a,1);
  64. }
  65. }
  66. }
  67. return 0;
  68. }

HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)的更多相关文章

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

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

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

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

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

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

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

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

  5. HDU 1166 敌兵布阵 线段树单点更新求和

    题目链接 中文题,线段树入门题,单点更新求和,建一棵树就可以了. #include <iostream> #include <cstdio> #include <cmat ...

  6. 【原创】hdu 1166 敌兵布阵(线段树→单点更新,区间查询)

    学习线段树的第三天...真的是没学点啥好的,又是一道水题,纯模板,我个人觉得我的线段树模板还是不错的(毕竟我第一天相当于啥都没学...找了一整天模板,对比了好几个,终于找到了自己喜欢的类型),中文题目 ...

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

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

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

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

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

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

随机推荐

  1. 搜索引擎ElasticSearch系列(一): ElasticSearch2.4.4环境搭建

    一:ElasticSearch简介 Elasticsearch is a distributed, RESTful search and analytics engine capable of sol ...

  2. Spring学习(三)-----Spring自动装配Beans

    在Spring框架,可以用 auto-wiring 功能会自动装配Bean.要启用它,只需要在 <bean>定义“autowire”属性. <bean id="custom ...

  3. Android 不同分辨率下调整界面

    Android Settings中有修改Disaply size的界面,通过修改Display size,能够修改屏幕分辨率. 由于修改了屏幕分辨率,有可能导致同一界面在不同的分辨率下显示出错(内容显 ...

  4. 算法笔记(c++)--c++中碰到的一些用法

    算法笔记(c++)--c++中碰到的一些用法 toupper(xxx)可以变成大写; tolower(xx)小写 isalpha(xxx)判断是不是字母 isalnum(xx)判断是不是数字 abs( ...

  5. Scrum立会报告+燃尽图(十月二十二日总第十三次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...

  6. 在windows和unbuntu上安装octave

    windows安装octave 安装wiki Octave ftp库 从上述的库中可以找到对应的版本的octave的exe安装程序,或者是zip等的压缩包,建议直接下载对应系统的exe执行文件.安装. ...

  7. s2sh乱码一个小处理(新手按流程走)

    解决乱码几小点: 1.配置过滤器,可以选择自己写,既然你用的SSH框架就更简单了,直接用Spring的过滤器,web.xml里配置一下即可. 2.Jsp页面设置编码,所有地方都要相同,我习惯用GBK ...

  8. Scrum 项目 5.0

    5.0--------------------------------------------------- 1.团队成员完成自己认领的任务. 2.燃尽图:理解.设计并画出本次Sprint的燃尽图的理 ...

  9. mysql中一些表选项

    表选项列表 表选项就是,创建一个表的时候,对该表的整体设定,主要有如下几个: charset = 要使用的字符编码, engine = 要使用的存储引擎(也叫表类型), auto_increment ...

  10. c# AOP 文章地址

    AOP:aspect oriented programing 面向切面编程.大概就是在程序的指定地方,可以做拦截然后插入执行指定的一段程序,这种模式在写日志,权限检查等操作很有用,这些操作都是固定的处 ...