http://lightoj.com/volume_showproblem.php?problem=1112

题目大意:

1 i        将第i个数值输出,并将第i个值清0

2 i v     将第i个数值加v

3 i j      输出从i到j的数值和

简单的单点更新+区间求和,代码很简单的模板

但此题有一个神坑的地方当操作为1是输出第i个数值不是直接输出,而是通过查找输出(太坑了。。。)

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<queue>
  4. #include<algorithm>
  5. #define N 100010
  6. #define Lson root<<1, L, tree[root].Mid()
  7. #define Rson root<<1|1, tree[root].Mid() + 1, R
  8.  
  9. using namespace std;
  10.  
  11. struct Tree
  12. {
  13. int L, R;
  14. long long sum, e;
  15. bool op;
  16. int Mid()
  17. {
  18. return (R + L) / ;
  19. }
  20. } tree[N * ];
  21.  
  22. long long al[N];
  23.  
  24. void Build(int root, int L, int R)
  25. {
  26. tree[root].L = L, tree[root].R = R;
  27. tree[root].op = false;
  28. if(L == R)
  29. {
  30. tree[root].sum = al[L];
  31. return ;
  32. }
  33.  
  34. Build(Lson);
  35. Build(Rson);
  36.  
  37. tree[root].sum = tree[root<<].sum + tree[root<<|].sum;
  38. }
  39.  
  40. void Insert(int root, int k, long long e)
  41. {
  42. tree[root].sum += e;
  43. if(tree[root].L == tree[root].R)
  44. return ;
  45. if(k <= tree[root].Mid())
  46. Insert(root<<, k, e);
  47. else if(k > tree[root].Mid())
  48. Insert(root<<|, k, e);
  49. }
  50.  
  51. long long Query(int root, int L, int R)
  52. {
  53. if(tree[root].L == L && tree[root].R == R)
  54. return tree[root].sum;
  55. if(R <= tree[root].Mid())
  56. return Query(root<<, L, R);
  57. else if(L > tree[root].Mid())
  58. return Query(root<<|, L, R);
  59. else
  60. return Query(Lson) + Query(Rson);
  61. }
  62.  
  63. int main()
  64. {
  65. int m, n, a, p, b, i, t, x = ;
  66. long long e;
  67. char s[];
  68. scanf("%d", &t);
  69. while(t--)
  70. {
  71. x++;
  72. scanf("%d%d", &m, &n);
  73. for(i = ; i <= m ; i++)
  74. scanf("%lld", &al[i]);
  75. Build(, , m);
  76. printf("Case %d:\n", x);
  77. while(n--)
  78. {
  79. scanf("%d", &p);
  80. if(p == )
  81. {
  82. scanf("%d", &a);
  83. printf("%d\n", Query(, a + , a + ));//注意! ! ! 坑来了!!!
  84. Insert(, a + , -Query(, a + , a + ));//此处一样
  85. }
  86. else if(p == )
  87. {
  88. scanf("%d%d", &a, &b);
  89. Insert(, a + , b);
  90. }
  91. else if(p == )
  92. {
  93. scanf("%d%d", &a, &b);
  94. printf("%lld\n", Query(, a + , b + ));
  95. }
  96. }
  97. }
  98. return ;
  99. }

LightOJ 1112 Curious Robin Hood (单点更新+区间求和)的更多相关文章

  1. Lightoj 1112 - Curious Robin Hood 【单点改动 + 单点、 区间查询】【树状数组 水题】

    1112 - Curious Robin Hood PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: 64 MB ...

  2. POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)

    POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...

  3. POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)

    POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...

  4. HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)

    HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...

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

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

  6. hdu 1166线段树 单点更新 区间求和

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

  7. hdu1166(线段树单点更新&区间求和模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意:中文题诶- 思路:线段树单点更新,区间求和模板 代码: #include <iost ...

  8. poj 3321 单点更新 区间求和

    Apple Tree Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java c ...

  9. hdu 1166 (单点更新+区间求和+裸题)

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

随机推荐

  1. Debian 如何更改hdmi接口输出的分辨率

    1. 先删除无用的文件: a) Boot/boot.src b) Boot/script.bin 2. 打开boot/script.fex,找到disp_init节点 a) 将screenX_outp ...

  2. UVa 10391 (水题 STL) Compound Words

    今天下午略感无聊啊,切点水题打发打发时间,=_=|| 把所有字符串插入到一个set中去,然后对于每个字符串S,枚举所有可能的拆分组合S = A + B,看看A和B是否都在set中,是的话说明S就是一个 ...

  3. MYSQL复制的几种模式

    MySQL 5.1 中,在复制方面的改进就是引进了新的复制技术:基于行的复制. MYSQL复制的几种模式 MySQL 5.1 中,在复制方面的改进就是引进了新的复制技术:基于行的复制.简言之,这种新技 ...

  4. yii2.0 输出url 注册js css文件

    //输出url <a href="<?=  Url::to(['/users/login/login','id'=>5,'mark'=>true]) ?>&qu ...

  5. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.3配置共享磁盘

    2.3.配置共享磁盘 2.3.1.创建共享磁盘 在cmd中进入WMware Workstation 10.0 安装目录: 1.创建存储Oracle Clusterware文件  (Oracle Clu ...

  6. [Everyday Mathematics]20150214

    设 $\dps{x\in \sex{0,\frac{\pi}{2}}}$, 试比较 $\tan(\sin x)$ 和 $\sin(\tan x)$.

  7. Yii系列教程(四):使用Memcache保存会话

    1环境准备 安装Memcached服务端: yum -y installmemcached.x86_64 安装PHP-Memcache扩展: yum -y installphp-pecl-memcac ...

  8. devexpress datagrid 与imageEdit以及如何存图片到数据库 z

    http://blog.csdn.net/haoyujie/article/details/41277703 首先建立了一个数据库的表,这个表中,有一个字段是image类型(SQL Server数据库 ...

  9. [讲座]【项目收集】“清流资本”互联网金融沙龙——颠覆者的创新与机会

    [项目收集]"清流资本"互联网金融沙龙--颠覆者的创新与机会 2014年4月19日 14:00 - 2014年4月19日 17:00 北京海淀北京海淀区海淀图书城南侧3W咖啡 限额 ...

  10. 【,net】发布网站问题

    今天解决了一个发布后网站访问不了的问题: 问题: 发布网站:http://172.168.1.102:2222/nologin.html,但是页面一直处于刷新状态,进行不了系统: 解决方法: 问开发他 ...