P2801 教主的魔法(分块入门)
两个月之前听yyr学长讲的分块,感觉是个很神奇的暴力,但到现在还是懵的一匹
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
int belong[maxn];
int a[maxn];
int b[maxn];
int d[maxn];
int l[maxn];
int r[maxn];
int p[maxn];
int n,q;
int num,block;
void build()//预处理块
{
block=sqrt(n);
num=n/block;
if(n%block)
{
num++;
}
for(int i=;i<=n;i++)
{
belong[i]=(i-)/block+;
b[i]=a[i];
}
for(int i=;i<=num;i++)
{
l[i]=(i-)*block+;
r[i]=i*block;
}
r[num]=n;
for(int i=;i<=num;i++)
{
sort(b+l[i],b+r[i]+);
}
}
void update(int ll,int rr,int w)
{
if(belong[ll]==belong[rr])
{
for(int i=ll;i<=rr;i++)
{
a[i]+=w;
}
for(int i=l[belong[ll]];i<=r[belong[ll]];i++)
{
b[i]=a[i];
}
sort(b+l[belong[ll]],b+r[belong[ll]]+);
}
else
{
for(int i=ll;i<=r[belong[ll]];i++)
{
a[i]+=w;
}
for(int i=l[belong[ll]];i<=r[belong[ll]];i++)
{
b[i]=a[i];
}
sort(b+l[belong[ll]],b+r[belong[ll]]+);
for(int i=l[belong[rr]];i<=rr;i++)
{
a[i]+=w;
}
for(int i=l[belong[rr]];i<=r[belong[rr]];i++)
{
b[i]=a[i];
}
sort(b+l[belong[rr]],b+r[belong[rr]]+);
for(int i=belong[ll]+;i<=belong[rr]-;i++)
{
p[i]+=w;
}
}
}
int ask(int ll,int rr,int c)
{
int ans=;
if(belong[ll]==belong[rr])
{
for(int i=ll;i<=rr;i++)
{
if(a[i]+p[belong[i]]>=c)
{
ans++;
}
}
printf("%d\n",ans);
}
else
{
for(int i=ll;i<=r[belong[ll]];i++)
{
if(a[i]+p[belong[i]]>=c)
{
ans++;
}
}
for(int i=l[belong[rr]];i<=rr;i++)
{
if(a[i]+p[belong[i]]>=c)
{
ans++;
}
}
for(int i=belong[ll]+;i<belong[rr];i++)
{
int l1=l[i],r1=r[i],result=,mid;
while(l1<=r1)
{
mid=(l1+r1)>>;
if(b[mid]+p[i]>=c)
{
r1=mid-;
result=r[i]-mid+;
}
else
{
l1=mid+;
}
}
ans+=result;
}
printf("%d\n",ans);
}
}
int main()
{
int A,B,C;
char ch[];
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
build();
while(q--)
{
scanf("%s",ch);
scanf("%d%d%d",&A,&B,&C);
if(ch[]=='A')
{
ask(A,B,C);
}
else
{
update(A,B,C);
}
}
return ;
}
P2801 教主的魔法(分块入门)的更多相关文章
- 洛谷P2801 教主的魔法 [分块,二分答案]
题目传送门 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. ...
- 洛谷P2801 教主的魔法 分块
正解:分块 解题报告: 哇之前的坑还没填完就又写新博客? 不管不管,之前欠的两三篇题解大概圣诞节之前会再仔细想想然后重新写下题解趴,确实还挺难的感觉没有很好的理解呢QAQ还是太囫囵吞枣不求甚解了,这样 ...
- P2801 教主的魔法 (分块)
题目传送 长度为\(n(n\le 1000000)\)的数组,\(q(q\le 3000)\) 次操作.修改操作即将某个区间的值增加某个不大于1000的值,查询操作即查询某个区间比C大于等于的数有多少 ...
- P2801 教主的魔法(分块)
P2801 教主的魔法 区间加法,区间查询 显然就是分块辣 维护一个按块排好序的数组. 每次修改依然是整块打标记,零散块暴力.蓝后对零散块重新排序. 询问时整块二分,零散块暴力就好辣 注意细节挺多和边 ...
- 洛谷——P2801 教主的魔法(线段树or分块)
P2801 教主的魔法 (1) 若第一个字母为“M”,则紧接着有三个数字L.R.W.表示对闭区间 [L, R] 内所有英雄的身高加上W. (2) 若第一个字母为“A”,则紧接着有三个数字L.R.C.询 ...
- 洛谷 P2801 教主的魔法 解题报告
P2801 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.--.N. ...
- Luogu 2801 教主的魔法 | 分块模板题
Luogu 2801 教主的魔法 | 分块模板题 我犯的错误: 有一处l打成了1,还看不出来-- 缩小块大小De完bug后忘了把块大小改回去就提交--还以为自己一定能A了-- #include < ...
- BZOJ 3343: 教主的魔法(分块+二分查找)
BZOJ 3343: 教主的魔法(分块+二分查找) 3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: ...
- P2801 教主的魔法 (线段树)
题目 P2801 教主的魔法 解析 成天做水题 线段树,第一问区间加很简单 第二问可以维护一个区间最大值和一个区间最小值,若C小于等于区间最小值,就加上区间长度,若C大于区间最大值,就加0 ps:求教 ...
随机推荐
- c#文件图片操作
系统特殊目录路径 //取得特殊文件夹的绝对路径 //桌面 Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //收藏夹 Env ...
- 把项目中那些恶心的无处存储的大块数据都丢到FastDFS之快速搭建
在我们开发项目的时候,经常会遇到大块数据的问题(2M-100M),比如说保存报表中1w个人的ID号,他就像一个肿瘤一样,存储在服务器哪里都 觉得恶心,放在redis,mongodb中吧,一下子 ...
- Vb.net MakeLong MAKELPARAM 合并整数代码
Function MAKELPARAM(wLow As UShort, wHigh As UShort) As UInteger Return wHigh * &H10000 + wLow E ...
- 用jQuery实现切换动态图片
1.实现动态图片的切换只需要改变目标图片的路径
- 【问题】VS问题集合,不用也要收藏防止以后使用找不到
在日常的使用或者工作当中我们的vs会时不时的给我一些小“惊喜”.让我们有时候无可奈何.这不今天我又遇到了所以我决定记录下这些,方便以后再次出现好解决. 无法启动iis express web 服务器 ...
- Java开发相关的linux一些基础命令,必须要掌握的
1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name "*.xml" 递归查找所有的 ...
- html meta标签使用及属性介绍
自学前端开始,我对meta标签接触不多,主要把精力都集中在能显示出来的标签上,比如span.button.h1等等.有时候去查看一些知名网站的源码,发现head标签里有一大摞的meta. 今天就来学习 ...
- Web后端 JAVA学习之路
1.Java分类 Java按应用来分,可以分为J2ME(手机版),J2SE(标准版),J2EE(企业版)三部分. ・J2ME:已经被安卓开发取代. ・J2SE:Java的核心类,其中包括桌面应用,但一 ...
- flex 输入框布局
1:创建一个弹性容器(display:flex) 2:构建2个或3个弹性项目. 3:把弹性项目设置为居中对齐.(align-items:center) 4:改变input自身对齐方式,把它设置为拉伸以 ...
- Linux系统上Nginx服务器的安装与配置
前言: 详细步骤移步菜鸟教程 一. 安装Nginx,注意虚拟机与宿主机的网络连通性 l 安装编译工具及库文件(zlib库. ssl) yum -y install make zlib zlib-de ...