题目大意:有$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. 一张思维导图带你梳理HashMap相关知识

    HashMap可以说是java中最常见也是最重要的key-value存储结构类,很多程序员可能经常用,但是不一定清楚这个类背后的数据结构和相关操作原理,为了复习HashMap相关的知识,今天花了一天的 ...

  2. 用MySQL的optimizer_trace进行sql调优

    在我们调优MySQL的SQL时候,通常使用三种工具进行查看sql执行的效率,explain.profile.optimizer_trace.前两个经常被人使用,由于第三个难度较大,大家使用的较少,下面 ...

  3. 在haoodp-2.7.3 HA的基础上安装Hbase HA

    前提安装好hadoop基于QJM的高可用 node1 HMaster node2 HMaster.HRegionServer node3 HRegionServer node4 HRegionServ ...

  4. scrapy--Cookies

    大家好,之前看到的关于cookies的应用,由于有段时间没看,再看的时候花了一些时间,来给大家总结下.本文是根据:"http://www.bubuko.com/infodetail-2233 ...

  5. php-5.6.26源代码 - opcode处理器,“乘法opcode”处理器

    // opcode处理器 - 运算符怎么执行: “*” 乘法opcode处理器 static int ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(Z ...

  6. html页面 加载完成后再刷新 一次

    主要用于第一次加载页面有部分加载bug,再刷新一次即可正常运行. 简单粗暴直接上代码,不带参数,0影响 <Script>function refresh(){ url = location ...

  7. 解决SecureCRT远程Linux遇到文件不能直接往CRT里直接拖入的问题

    不能拖入到CRT的第一个原因可能是Options-->Global Options-->Terminal中的Mouse下的Copy on select没有勾选.当发现自己勾选了也不能往里面 ...

  8. C语言真正的编译过程(4个步骤~~预编译,编译,汇编,连接)

    转载自:https://www.cnblogs.com/wuyouxiaocai/p/5701088.html#commentform 说实话,很多人做了很久的C/C++,也用了很多IDE,但是对于可 ...

  9. SGU495 概率DP

    Kids and Prizes ICPC (International Cardboard Producing Company) is in the business of producing car ...

  10. python——直方图均衡化

    from PIL import Image from pylab import * from numpy import * def histeq(im,nbr_bins = 256): "& ...