题目大意:有$n$个数,$q$个操作。两种操作:

  1. $M\;l\;r\;w:$把$[l,r]$所有数加上$w$
  2. $A\;l\;r\;c:$查询$[l,r]$内大于等于$c$的元素的个数。

题解:分块,对于在整块修改改$tag$,非整块暴力修改,查询整块用$lower\_bound$,非整块暴力

卡点:

C++ Code:

#include <cstdio>
#include <cmath>
#include <algorithm>
#define maxn 1000010
int n, Q, bsz, num;
int l[1010], r[1010], tg[1010];
struct node {
int w, id;
inline bool operator < (const node &rhs) const {return w < rhs.w;}
} s[maxn];
int main() {
scanf("%d%d", &n, &Q); bsz = sqrt(n);
for (int i = 1; i <= n; i++) scanf("%d", &s[i].w), s[i].id = i;
num = n / bsz + 1;
for (int i = 1; i <= num; i++) {
l[i] = (i - 1) * bsz;
if (i == 1) l[i] = 1;
r[i] = i * bsz - 1;
if (i == num) r[i] = n;
std::sort(s + l[i], s + r[i] + 1);
}
while (Q --> 0) {
char op[10];
int x, y, z;
scanf("%s%d%d%d", op, &x, &y, &z);
int lb = x / bsz + 1, rb = y / bsz + 1;
if (op[0] == 'M') {
if (lb == rb) {
for (int i = l[lb]; i <= r[lb]; i++) {
s[i].w = tg[lb];
if (s[i].id >= x && s[i].id <= y) s[i].w += z;
}
tg[lb] = 0;
std::sort(s + l[lb], s + r[lb]);
} else {
for (int i = l[lb]; i <= r[lb]; i++) {
s[i].w += tg[lb];
if (s[i].id >= x) s[i].w += z;
}
std::sort(s + l[lb], s + r[lb] + 1);
for (int i = lb + 1; i < rb; i++) tg[i] += z;
for (int i = l[rb]; i <= r[rb]; i++) {
s[i].w += tg[lb];
if (s[i].id <= y) s[i].w += z;
}
std::sort(s + l[rb], s + r[rb] + 1);
tg[lb] = tg[rb] = 0;
}
} else {
int ans = 0;
if (lb == rb) {
for (int i = l[lb]; i <= r[lb]; i++) {
s[i].w += tg[lb];
if (s[i].id >= x && s[i].id <= y && s[i].w >= z) ans++;
}
tg[lb] = 0;
} else {
for (int i = l[lb]; i <= r[lb]; i++) {
s[i].w += tg[lb];
if (s[i].id >= x && s[i].w >= z) ans++;
}
for (int i = lb + 1; i < rb; i++) {
ans += s + r[i] - std::lower_bound(s + l[i], s + r[i] + 1, (node) {z - tg[i], 0}) + 1;
}
for (int i = l[rb]; i <= r[rb]; i++) {
s[i].w += tg[rb];
if (s[i].id <= y && s[i].w >= z) ans++;
}
tg[lb] = tg[rb] = 0;
}
printf("%d\n", ans);
}
}
return 0;
}

[洛谷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 教主的魔法 题解

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

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

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

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

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

随机推荐

  1. Git工作流指南:功能分支工作流(转)

    一旦你玩转了集中式工作流,在开发过程中可以很简单地加上功能分支,用来鼓励开发者之间协作和简化交流. 功能分支工作流背后的核心思路是所有的功能开发应该在一个专门的分支,而不是在master分支上.这个隔 ...

  2. jQuery选择器与事件学习笔记

    层次选择器:  $("div li")获取div下的所有li元素(后代.子.子的子......)  $("div>li")获取div下的直接li子元素.  ...

  3. 【主席树上二分】bzoj5361: [Lydsy1805月赛]对称数

    随机化选讲例题 题目大意 小 Q 认为,偶数具有对称美,而奇数则没有.给定一棵 n 个点的树,任意两点之间有且仅有一条直接或间接路径.这些点编号依次为 1 到 n,其中编号为 i 的点上有一个正整数 ...

  4. 爬虫学习(十九)——Scrapy的学习及其使用

    Scrapy框架的介绍 Scrapy,非常的强悍,通过python语言编写的,非常知名的爬虫框架 框架工作流程 框架流程图 基本工作流程; 1.引擎向spiders要url 2.引擎将要爬取的url给 ...

  5. datatable 默认按某字段排序

    "columns": [ { data: null}, { data: 'name'}, { data: 'birthday'} ], "order": [[ ...

  6. 微信小程序开发入门学习(1):石头剪刀布小游戏

    从今天起开始捣鼓小程序了2018-12-17   10:02:15 跟着教程做了第一个入门实例有兴趣的朋友可以看看: 猜拳游戏布局 程序达到的效果 猜拳游戏的布局是纵向显示了三个组件:文本组件(tex ...

  7. 前端性能优化JavaScript篇

    关于前端性能优化的讨论一直都很多,包罗的知识也很多,可以说性能优化只有更好,没有最好.前面我写了一篇关于css优化的总结文章,今天再从javascript方面聊一聊. 1.从资源加载方面来说,浏览器的 ...

  8. 平衡二叉查找树 AVL 的实现

    不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找).如何解决这个问题呢?关键在于如何最大限度的减小树的深度.正是基于这个想法,平衡二叉树出现了. 平衡二叉树的定义 (A ...

  9. thinkphp3.2 where 条件查询 复查的查询语句

    复查的查询语句 有的时候,我们希望通过一次的查询就能解决问题,这个时候查询条件往往比较复杂,但是却比多次查询库来的高效. 实在是搞不定的话就直接用$where[‘_string’] = ‘xxxx’, ...

  10. 爬虫之urllib模块

    1. urllib模块介绍 python自带的一个基于爬虫的模块. 作用:可以使用代码模拟浏览器发起请求. 经常使用到的子模块:request,parse. 使用流程: 指定URL. 针对指定的URL ...