赤裸裸的线段树,借个模板,改写一下即可。

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<stdio.h>
  4. #include<cstring>
  5. using namespace std;
  6. struct line{
  7. int left,right,n;
  8. int mid(){return (left+right)/2;}
  9. }a[50010<<2];
  10. unsigned short num[50010];
  11. void build(int l,int r,int step)
  12. {
  13. a[step].left=l;
  14. a[step].right=r;
  15. if(l==r)
  16. {
  17. a[step].n=num[l];
  18. return;
  19. }
  20. int mid=a[step].mid();
  21. build(l,mid,step*2);
  22. build(mid+1,r,step*2+1);
  23. a[step].n=a[step*2].n+a[step*2+1].n;
  24. }
  25. int query(int l,int r,int step)
  26. {
  27. if(a[step].left==l&&a[step].right==r)
  28. return a[step].n;
  29. int mid=a[step].mid();
  30. if(mid>=r)
  31. return query(l,r,step*2);
  32. else if(mid<l)
  33. return query(l,r,step*2+1);
  34. else
  35. return query(l,mid,step*2)+query(mid+1,r,step*2+1);
  36. }
  37. void Add(int l,int r,int step,int x,int y)
  38. {
  39. if(a[step].left==a[step].right&&a[step].right==x)
  40. {
  41. a[step].n+=y;
  42. return ;
  43. }
  44. int mid=a[step].mid();
  45. if(x>mid)
  46. Add(mid,r,step*2+1,x,y);
  47. else
  48. Add(l,mid,step*2,x,y);
  49. a[step].n=a[step*2].n+a[step*2+1].n;
  50. }
  51. void Sub(int l,int r,int step,int x,int y)
  52. {
  53. if(a[step].left==a[step].right&&a[step].right==x)
  54. {
  55. a[step].n-=y;
  56. return ;
  57. }
  58. int mid=a[step].mid();
  59. if(x>mid)
  60. Sub(mid,r,step*2+1,x,y);
  61. else
  62. Sub(l,mid,step*2,x,y);
  63. a[step].n=a[step*2].n+a[step*2+1].n;
  64. }
  65. int main()
  66. {
  67. int t,n;
  68. scanf("%d",&t);
  69. for(int tcase=1;tcase<=t;tcase++)
  70. {
  71. printf("Case %d:\n",tcase);
  72. scanf("%d",&n);
  73. for(int i=1;i<=n;i++)
  74. scanf("%d",&num[i]);
  75. build(1,n,1);
  76. char in[6];
  77. int x,y;
  78. while(scanf("%s",&in)&&strcmp(in,"End")!=0)//字符数组匹配,弄得我好惨
  79. {
  80. scanf("%d%d",&x,&y);
  81. if(strcmp(in,"Query")==0)
  82. printf("%d\n",query(x,y,1));
  83. else if(strcmp(in,"Sub")==0)
  84. Sub(1,n,1,x,y);
  85. else if(strcmp(in,"Add")==0)
  86. Add(1,n,1,x,y);
  87. }
  88. }
  89. return 0;
  90. }

HDOJ1166 敌兵布阵的更多相关文章

  1. 敌兵布阵 HDOJ--1166

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

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

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

  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 acm 1166 敌兵布阵 (线段树)

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

  6. HDU 1166 敌兵布阵

    B - 敌兵布阵 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  7. HDU 1166 敌兵布阵(线段树模板题)

    题目链接: 传送门 敌兵布阵 Time Limit: 2000MS     Memory Limit: 32768 K Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头 ...

  8. ACM: 敌兵布阵 解题报告 -线段树

    敌兵布阵 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Li ...

  9. hdu 敌兵布阵(线段树之单点更新)

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

随机推荐

  1. hdu 2222 Keywords_ac自动机模板

    题意:给你n个单词,再给你一串字符,求在字符中有多少个单词出现过 #include <iostream> #include<cstdio> #include<cstrin ...

  2. 《编写高质量代码 改善Java程序的151个建议》书摘

    例子1:三元操作符的陷阱 int i = 80; String str1 = String.valueOf(i < 100 ? 90 : 100); String str2 = String.v ...

  3. Java List 汉字进行排序

    Comparator<Person> cmp = new Comparator<Person>() { public int compare(Person o1, Person ...

  4. OC基础16:复制对象

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.浅复制即是指针赋值,复制对象的修改会影 ...

  5. 使用ObjectAnimator开发打开、关闭书本动画

    动画效果 动画效果-分享链接 (想做成gif图的,尝试各种工具无果) ObjectAnimator简单介绍及实现思路 ObjectAnimator是从api level 11 (Android3.0x ...

  6. .NET与你若仅仅如初见(一)

    难忘初次见到你,那是一个夏日的午后,可是天空中乌云密布.大雨来临前的一段时间总是非常闷热的,当我朦胧的睡眼看到你之后瞬间就清醒了,感觉空气也凉爽了起来.尽管仅仅一眼但就是被你那清新脱俗沉鱼落雁之美所征 ...

  7. 【MFC学习笔记-作业8-蝴蝶飞~】【什么鬼作业】

    作业要求: 用定时器控制蝴蝶在窗口废物,如图所示... 这是什么鬼作业啊...蝴蝶还要我这个手残手画啊233333333          (ノಠ .ಠ)ノ彡┻━┻ 不过多亏之前几个鬼作业的福 收获颇 ...

  8. mybatis中使用log4j

    Mybatis默认使用有slf4j,所以必须加入下面的依赖,否则可能出现日志无法打印sql或者无法打印resultset. <dependency> <groupId>org. ...

  9. Javascript 常用代码总结

    1. document.referrer可以获得上一页的地址,使用document.anchors获得页面上面所有的链接元素,而不必使用 document.getElementsByTagName(' ...

  10. iOS分类

    ios中的分类其实就是把两个类用两个或多个文件写的,,在平时的开发中我们会发现有的时候我们想要一个类多个什么功能  但是已经定义好的类中没有,,我们又不想更改我们的程序  那么现在的这种情况下我就可以 ...