题面

刚看到这道题的时候用了个树状数组优化前缀和差分的常数优化竟然AC了?(这数据也太水了吧~)

本人做的第一道分块题,调试了好久好久,最后竟然没想到二分上还会出错!(一定要注意)仅此纪念;

  1. #include <bits/stdc++.h>
  2. #pragma GCC optimize(2)
  3. using namespace std;
  4. int a[1000010],b[1000010],belong[1000010]; //原来的
  5. int lazy[1000010],l[1000010],r[1000010]; //块上的
  6. int block,tot,n,m;
  7. void build()
  8. {
  9. block=sqrt(n);
  10. tot=n/block;
  11. if(n%block){
  12. ++tot;
  13. }
  14. for(register int i=1;i<=n;i++){
  15. b[i]=a[i];
  16. belong[i]=(i-1)/block+1;
  17. }
  18. for(register int i=1;i<=tot;i++){
  19. l[i]=(i-1)*block+1;
  20. r[i]=i*block;
  21. }
  22. r[tot]=n;
  23. for(register int i=1;i<=tot;i++){
  24. sort(b+l[i],b+r[i]+1);
  25. }
  26. return;
  27. }
  28. void change(int x,int y,int k)
  29. {
  30. if(belong[x]==belong[y]){
  31. for(register int i=x;i<=y;i++){
  32. a[i]+=k;
  33. }
  34. for(register int i=l[belong[x]];i<=r[belong[x]];i++){
  35. b[i]=a[i];
  36. }
  37. sort(b+l[belong[x]],b+r[belong[x]]+1);
  38. return ;
  39. }
  40. for(register int i=x;i<=r[belong[x]];i++){
  41. a[i]+=k;
  42. }
  43. for(register int i=l[belong[x]];i<=r[belong[x]];i++){
  44. b[i]=a[i];
  45. }
  46. sort(b+l[belong[x]],b+r[belong[x]]+1);
  47. for(register int i=l[belong[y]];i<=y;i++){
  48. a[i]+=k;
  49. }
  50. for(register int i=l[belong[y]];i<=r[belong[y]];i++){
  51. b[i]=a[i];
  52. }
  53. sort(b+l[belong[y]],b+r[belong[y]]+1);
  54. for(register int i=belong[x]+1;i<=belong[y]-1;i++){
  55. lazy[i]+=k;
  56. }
  57. }
  58. int query(int x,int y,int goal)
  59. {
  60. int ans=0;
  61. if(belong[x]==belong[y]){
  62. for(register int i=x;i<=y;i++){
  63. if(a[i]+lazy[belong[x]]>=goal) ++ans;
  64. }
  65. return ans;
  66. }
  67. for(register int i=x;i<=r[belong[x]];i++){
  68. if(a[i]+lazy[belong[x]]>=goal) ++ans;
  69. }
  70. for(register int i=l[belong[y]];i<=y;i++){
  71. if(a[i]+lazy[belong[y]]>=goal) ++ans;
  72. }
  73. for(register int i=belong[x]+1;i<=belong[y]-1;i++){
  74. int L=l[i],R=r[i],mid;
  75. while(L<R){
  76. int mid=(L+R)/2;
  77. if(b[mid]+lazy[i]>=goal){
  78. R=mid;
  79. }
  80. else{
  81. L=mid+1;
  82. }
  83. }
  84. if(L==r[i]){
  85. ans+=((b[L]+lazy[i])>=goal);
  86. continue;
  87. }
  88. ans+=(r[i]-L+1);
  89. }
  90. return ans;
  91. }
  92. int main()
  93. {
  94. cin>>n>>m;
  95. for(register int i=1;i<=n;i++) scanf("%d",&a[i]);
  96. build();
  97. for(register int i=1;i<=m;i++){
  98. char type;
  99. int x,y,k;
  100. cin>>type>>x>>y>>k;
  101. if(type=='M'){
  102. change(x,y,k);
  103. }
  104. else{
  105. cout<<query(x,y,k)<<endl;
  106. }
  107. }
  108. }

洛谷 P2801 教主的魔法 题解的更多相关文章

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

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

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

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

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

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

  4. 洛谷 P2801 教主的魔法

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

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

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

  6. 洛谷P2801 教主的魔法 分块

    正解:分块 解题报告: 哇之前的坑还没填完就又写新博客? 不管不管,之前欠的两三篇题解大概圣诞节之前会再仔细想想然后重新写下题解趴,确实还挺难的感觉没有很好的理解呢QAQ还是太囫囵吞枣不求甚解了,这样 ...

  7. [洛谷P2801]教主的魔法

    题目大意:有$n$个数,$q$个操作.两种操作: $M\;l\;r\;w:$把$[l,r]$所有数加上$w$ $A\;l\;r\;c:$查询$[l,r]$内大于等于$c$的元素的个数. 题解:分块,对 ...

  8. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

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

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

随机推荐

  1. jquery type属性 语法

    jquery type属性 语法 作用:type 属性描述触发哪种事件类型.大理石直角尺 语法:event.typ 参数: 参数 描述 event     必需.规定要检查的事件.这个 event 参 ...

  2. GDB简单调试

    最近在开始刷LeetCode,也开始在Linux上写代码,直接gcc编译,在调试的时候,需要用到gdb调试,所以在这里会不定期更新我学习到的gdb调试. 先编译成可执行文件 首先我们使用g++或者gc ...

  3. python脚本中selenium启动浏览器报错os.path.basename(self.path), self.start_error_message) selenium.common.excep

    在python脚本中,使用selenium启动浏览器报错,原因是未安装浏览器驱动,报错内容如下: # -*- coding:utf-8 -*-from selenium import webdrive ...

  4. Apicloud_(接口验证)用户注册头部信息X-APICloud-AppKey生成

    接口验证KEY生成规则说明 官方文档: 传送门 "X-APICloud-AppKey"生成规则是基于SHA1()算法生成的 AppKey= SHA1(你的应用ID + 'UZ' + ...

  5. win7,win10 系统上搭建testlink1.9.18环境实操步骤

    Windows7,10系统上安装TestLink1.9.18(基于xampp) 写于:2018.11.28 二次排版微调:2019.01.01 如遇本文资料缺失,可点击百度网盘查看原始资料. 链接:h ...

  6. Zabbix连接

    下载: wget https://fossies.org/linux/misc/zabbix-4.0.5.tar.gz 安装: https://www.cnblogs.com/sunbeidan/p/ ...

  7. BOM—Browser Object Model and DOM—Document Object Model

    浏览器对象模型的内涵是每个页面都是一个window对象,而dom是document为基准的模型,而document与wimdow.document指向相同,所以可以这么理解,bom模型的定义是包括do ...

  8. [CSP-S模拟测试]:Cover(单调栈++单调队列+DP)

    题目传送门(内部题126) 输入格式 第一行两个个整数$n,m$表示区间的长度与彩灯的数量. 接下来$m$行,每行三个整数$l_i,r_i,a_i$表示一条彩灯能够覆盖的区间以及它的美观程度. 输出格 ...

  9. 高性能JavaScript之加载和执行

    JS在浏览器中的性能,可以认为是开发者所面临的最重要的可行性问题.这个问题因JS的阻塞特性变得复杂,也就是说当浏览器在执行JS代码时,不能同时做其他任何事情.事实上,大多数浏览器都使用单一进程来处理U ...

  10. 作业要求20191010-9 alpha week 1/2 Scrum立会报告+燃尽图 07

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8752 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...