P2801 教主的魔法

区间加法,区间查询

显然就是分块辣

维护一个按块排好序的数组。

每次修改依然是整块打标记,零散块暴力。蓝后对零散块重新排序

询问时整块二分,零散块暴力就好辣

注意细节挺多和边界问题TAT

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
inline int Min(int a,int b){return a<b?a:b;}
void read(int &x){
static char c=getchar();x=;
while(c<''||c>'') c=getchar();
while(''<=c&&c<='') x=x*+(c^),c=getchar();
}
#define N 1000005
int n,Len,m,a[N],b[N],add[];
inline int Bel(int x){return (x-)/Len+;}
void Add(int l,int r,int v){
register int i,p;
if(Bel(l)==Bel(r)){//注意l,r在同一块内,下同
p=Bel(l)*Len;
for(i=l;i<=r;++i) a[i]+=v;
for(i=p-Len+;i<=p;++i) b[i]=a[i];
sort(b+p-Len+,b+p);
return ;
}
p=Bel(l)*Len;
for(i=l;i<=p;++i) a[i]+=v;
for(i=p-Len+;i<=p;++i) b[i]=a[i];
sort(b+p-Len+,b+p);
for(i=Bel(l)+;i<Bel(r);++i) add[i]+=v;
p=(Bel(r)-)*Len+;
for(i=p;i<=r;++i) a[i]+=v;
for(i=Min(n,p+Len);i>=p;--i) b[i]=a[i];
sort(b+p,b+Min(n,p+Len));//注意最后一块右端不超过n
}
int Ask(int l,int r,int v){
register int i,p,re=;
if(Bel(l)==Bel(r)){
for(i=l;i<=r;++i) re+=(a[i]>=v-add[Bel(l)]);
return re;
}
p=Bel(l)*Len;
for(i=l;i<=p;++i) re+=(a[i]>=v-add[Bel(l)]);
for(i=Bel(l)+;i<Bel(r);++i){
int tmp=lower_bound(b+(i-)*Len+,b+i*Len,v-add[i])-b;
re+=i*Len-tmp+(b[tmp]>=v-add[i]);//如果整块都>v-add[i],注意lower_bound找到的tmp仍指向块的开头
}
p=(Bel(r)-)*Len+;
for(i=p;i<=r;++i) re+=(a[i]>=v-add[Bel(r)]);
return re;
}
int main(){
register int i;
char opt[]; int q1,q2,q3;
read(n);read(m); Len=sqrt(n);
for(i=;i<=n;++i) read(a[i]),b[i]=a[i];
for(i=;i+Len<=n;i+=Len) sort(b+i,b+i+Len);
sort(b+i,b+n+);
while(m--){
scanf("%s%d%d%d",opt,&q1,&q2,&q3);
if(opt[]=='M') Add(q1,q2,q3);
else if(opt[]=='A') printf("%d\n",Ask(q1,q2,q3));
}return ;
}

P2801 教主的魔法(分块)的更多相关文章

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

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

  2. P2801 教主的魔法(分块入门)

    两个月之前听yyr学长讲的分块,感觉是个很神奇的暴力,但到现在还是懵的一匹 #include<bits/stdc++.h> using namespace std; ; int belon ...

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

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

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

    题目传送 长度为\(n(n\le 1000000)\)的数组,\(q(q\le 3000)\) 次操作.修改操作即将某个区间的值增加某个不大于1000的值,查询操作即查询某个区间比C大于等于的数有多少 ...

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

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

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

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

  7. Luogu 2801 教主的魔法 | 分块模板题

    Luogu 2801 教主的魔法 | 分块模板题 我犯的错误: 有一处l打成了1,还看不出来-- 缩小块大小De完bug后忘了把块大小改回去就提交--还以为自己一定能A了-- #include < ...

  8. BZOJ 3343: 教主的魔法(分块+二分查找)

    BZOJ 3343: 教主的魔法(分块+二分查找) 3343: 教主的魔法 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1172  Solved:  ...

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

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

随机推荐

  1. Swagger Editor Linux安装(全新环境)

    查看内核版本 cat /proc/version cat /etc/redhat-release 查看系统是32位还是64位方法总结getconf LONG_BIT 安装相关工具 yum instal ...

  2. mybatis调用oracle存储过程 out游标类型参数 如何赋给java map

    <resultMap id="ticketInfosResultMap" type="Map"> <!--result要是默认用列名的话完全不 ...

  3. linux git patch 和patch以及git diff 命令

    1.git log 查看commit id,修改前为id1,修改后id2 2.根据id1到id2有几次提交来生成几个patch,否则的话会根据所有节点生成很多patch 比如: commit id2 ...

  4. 《全栈性能Jmeter》-3JMeter体系结构

  5. vue中动态绑定class

    我用的element-ui primary默认是这个颜色,ui设计的是这个颜色所以我们先要重写 .el-button--primary的样式 因为默认是没有勾选的所有事灰色所以下面重写样式为灰色 .e ...

  6. 关于微信分享的一些心得之recommend.js(直接复制就行)

    // import $ from 'jquery'import Vue from 'vue'export default function (type,title,con,img,url,) {  / ...

  7. cocos2d JS 鼠标响应事件

    对于PC和超级本,添加鼠标事件的的处理,可以加强用户的体验,其处理逻辑与触摸事件基本一样,多了一些鼠标特有的事件响应 如滚轮事件(onMouseScroll) cc.eventManager.addL ...

  8. System.Web.HttpException (0x80004005): 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。

    异常描述: Global.asax捕获到异常:System.Web.HttpException (0x80004005): 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 < ...

  9. RESTful 和RPC

    RESTful 全称是 Resource Representational State Transfer 即资源表现状态转换 通俗来说就是 资源在网络中以某种表现形式进行状态转移 RPC 全称是Rem ...

  10. RMAN备份策略与异机恢复一例

    实验环境: A机器(生产用途):RHEL 6.5 + Oracle 11.2.0.4 + IP Address 192.168.1.11 B机器(备机用途):RHEL 6.5 + Oracle 11. ...