Description

教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N。

每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W。(虽然L=R时并不符合区间的书写规范,但我们可以认为是单独增加第L(R)个英雄的身高)

CYZ、光哥和ZJQ等人不信教主的邪,于是他们有时候会问WD闭区间 [L, R] 内有多少英雄身高大于等于C,以验证教主的魔法是否真的有效。

WD巨懒,于是他把这个回答的任务交给了你。

Input

第1行为两个整数N、Q。Q为问题数与教主的施法数总和。

第2行有N个正整数,第i个数代表第i个英雄的身高。

第3到第Q+2行每行有一个操作:

(1) 若第一个字母为“M”,则紧接着有三个数字L、R、W。表示对闭区间 [L, R] 内所有英雄的身高加上W。

(2) 若第一个字母为“A”,则紧接着有三个数字L、R、C。询问闭区间 [L, R] 内有多少英雄的身高大于等于C。

Output

对每个“A”询问输出一行,仅含一个整数,表示闭区间 [L, R] 内身高大于等于C的英雄数。

线段树做的,不过貌似正解是分块.(不会分块啊 emm

差点被输入搞疯的一个题,输入竟然有好多个空格 qwq.难受得一逼.

结果发现是自己查询操作忘了判边界

维护区间最小值,维护\(tag\)标记.

暴力去找某个区间最小值\(\geq C\),直接累计答案.

不要忘记下放\(tag\)和判断\(l==r\)。

代码

  1. #include<cstdio>
  2. #include<cctype>
  3. #include<cstring>
  4. #include<iostream>
  5. #define R register
  6. #define ls o<<1
  7. #define rs o<<1|1
  8. #define N 1000008
  9. using namespace std;
  10. inline void in(int &x)
  11. {
  12. int f=1;x=0;char s=getchar();
  13. while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
  14. while(isdigit(s)){x=x*10+s-'0';s=getchar();}
  15. x*=f;
  16. }
  17. int n,m,tg[N<<3],mnn[N<<3];
  18. inline void up(int o)
  19. {
  20. mnn[o]=min(mnn[ls],mnn[rs]);
  21. return;
  22. }
  23. inline void down(int o)
  24. {
  25. if(tg[o])
  26. {
  27. tg[ls]+=tg[o];tg[rs]+=tg[o];
  28. mnn[ls]+=tg[o];mnn[rs]+=tg[o];
  29. tg[o]=0;
  30. }
  31. return;
  32. }
  33. void build(int o,int l,int r)
  34. {
  35. if(l==r)
  36. {
  37. in(mnn[o]);
  38. return;
  39. }
  40. int mid=(l+r)>>1;
  41. build(ls,l,mid);
  42. build(rs,mid+1,r);
  43. up(o);
  44. }
  45. void change(int o,int l,int r,int x,int y,int del)
  46. {
  47. if(x<=l and y>=r)
  48. {
  49. tg[o]+=del;mnn[o]+=del;
  50. return;
  51. }
  52. down(o);
  53. int mid=(l+r)>>1;
  54. if(x<=mid) change(ls,l,mid,x,y,del);
  55. if(y>mid) change(rs,mid+1,r,x,y,del);
  56. up(o);
  57. }
  58. int query(int o,int l,int r,int x,int y,int k)
  59. {
  60. if(mnn[o]>=k and x<=l and y>=r)
  61. return(r-l+1);;
  62. if(l==r)return 0;
  63. down(o);
  64. int mid=(l+r)>>1,res=0;
  65. if(x<=mid) res+=query(ls,l,mid,x,y,k);
  66. if(y>mid) res+=query(rs,mid+1,r,x,y,k);
  67. return res;
  68. }
  69. int main()
  70. {
  71. in(n),in(m);
  72. build(1,1,n);
  73. for(R int l,r,z;m;m--)
  74. {
  75. R char opt[6];
  76. scanf("%s%d%d%d",opt,&l,&r,&z);
  77. if(opt[0]=='A')
  78. printf("%d\n",query(1,1,n,l,r,z));
  79. else change(1,1,n,l,r,z);
  80. }
  81. }

线段树【p2801】教主的魔法的更多相关文章

  1. 洛谷——P2801 教主的魔法(线段树or分块)

    P2801 教主的魔法 (1) 若第一个字母为“M”,则紧接着有三个数字L.R.W.表示对闭区间 [L, R] 内所有英雄的身高加上W. (2) 若第一个字母为“A”,则紧接着有三个数字L.R.C.询 ...

  2. P2801 教主的魔法 (线段树)

    题目 P2801 教主的魔法 解析 成天做水题 线段树,第一问区间加很简单 第二问可以维护一个区间最大值和一个区间最小值,若C小于等于区间最小值,就加上区间长度,若C大于区间最大值,就加0 ps:求教 ...

  3. P2801 教主的魔法(分块)

    P2801 教主的魔法 区间加法,区间查询 显然就是分块辣 维护一个按块排好序的数组. 每次修改依然是整块打标记,零散块暴力.蓝后对零散块重新排序. 询问时整块二分,零散块暴力就好辣 注意细节挺多和边 ...

  4. 洛谷 P2801 教主的魔法 解题报告

    P2801 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.--.N. ...

  5. 洛谷P2801 教主的魔法 [分块,二分答案]

    题目传送门 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. ...

  6. luogu P2801 教主的魔法

    题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是 ...

  7. 洛谷 P2801 教主的魔法

    题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是 ...

  8. BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法

    http://www.lydsy.com/JudgeOnline/problem.php?id=3343  ||  https://www.luogu.org/problem/show?pid=280 ...

  9. P2801 教主的魔法

    传送门 $N$ 太大了主席树过不了 考虑分块 对每个块内的元素排序,询问就对大块二分查找,对两边小的部分暴力枚举 修改时维护 $add[i]$ 标记,维护当前块内整块已经加的数 那么整块的就直接修改 ...

  10. 洛谷 P2801 教主的魔法 题解

    题面 刚看到这道题的时候用了个树状数组优化前缀和差分的常数优化竟然AC了?(这数据也太水了吧~) 本人做的第一道分块题,调试了好久好久,最后竟然没想到二分上还会出错!(一定要注意)仅此纪念: #inc ...

随机推荐

  1. NVIDIA/DIGITS:Building DIGITS

    在 Prerequisites中的 sudo apt-get update命令发生错误: W: GPG 错误:http://developer.download.nvidia.com/compute/ ...

  2. PEAR DB 事务相关

    1.autoCommit().commit().rollback() function autoCommit($onoff=false) 指定是否自动提交事务.有的后端数据库不支持. function ...

  3. [转载]有关如何入门ACM

    来源: 吴垠的日志 一些题外话 首先就是我为什么要写这么一篇日志.原因很简单,就是因为前几天有个想起步做ACM人很诚恳的问我该如何入门.其实就现在而言,我并不是很想和人再去讨论这样的话题,特别是当我发 ...

  4. android 拓展ImageView播放GIF动画

    原生Android控件ImageView并不能支持播放GiF格式的图片.如果将一张GIF的图片放入ImageView中,它只会显示图片的第一帧,不会产生任何动画效果. Android中播放GIF动画实 ...

  5. nyoj 题目49 开心的小明

    开心的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天 ...

  6. jQuery选择器之类选择器

    类选择器,顾名思义,通过class样式类名来获取节点. 描述: $('.class') 类选择器,相对于id选择器来说,效率相对会低一些,但是优势就是可以多选. 同样的jQuery在实现上,对于类选择 ...

  7. hadoop2.6.4【windows7】构建maven项目 系列2

    准备windows版本的hadoop2.6.4 下载windows版本的hadoop2.6.4解压在本地 新建maven项目构建hadoop依赖 <?xml version="1.0& ...

  8. Hexo安装配置详解

    原文 http://blog.csdn.net/tonydandelion2014/article/details/61615898 http://www.joryhe.com/2016-06-06- ...

  9. HDU 6034 Balala Power!(贪心+排序)

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  10. js实现封装和继承

    封装(模拟对象) http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html 继承 htt ...