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:求教 ...
随机推荐
- element-ui 动态换肤
1.在安装好 element-ui@2.x 以后,首先安装sass-loader npm i sass-loader node-sass -D 2.安装 element-theme npm i ele ...
- 让ASP.NET Core支持GraphQL之-GraphQL的实现原理
众所周知RESTful API是目前最流行的软件架构风格之一,它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. RESTful的优越性是毋庸置疑 ...
- Asp.Net Core 轻松学-实现跨平台的自定义Json数据包
前言 在前后端分离的业务开发中,我们总是需要返回各种各样的数据包格式,一个良好的 json 格式数据包是我们一贯奉行的原则,下面就利用 Json.Net 来做一个简单具有跨平台的序列化数据包实 ...
- 从PRISM开始学WPF(番外)共享上下文 RegionContext-更新至Prism7.1
RegionContext共享上下文 There are a lot of scenarios where you might want to share contextual information ...
- C# Net MVC 大文件下载几种方式、支持速度限制、资源占用小
上一篇我们说到大文件的分片下载.断点续传.秒传,有的博友就想看分片下载,我们也来总结一下下载的几种方式,写的比较片面,大家见谅^_^. 下载方式: 1.html超链接下载: 2.后台下载(四种方法:返 ...
- 杭电ACM2018--母牛的故事
母牛的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- Java开发笔记(八十二)注解的基本单元——元注解
Java的注解非但是一种标记,还是一种特殊的类型,并且拥有专门的类型定义.前面介绍的五种内置注解,都可以找到对应的类型定义代码,例如查看注解@Override的源码,发现它的代码定义是下面这样的: @ ...
- 并发concurrent---1
背景:并发知识是一个程序员段位升级的体现,同样也是进入BAT的必经之路,有必要把并发知识重新梳理一遍. 并发concurrent: 说到并发concurrent,肯定首先想到了线程,创建线程有两种方法 ...
- Vue 无限滚动加载指令
也不存在什么加载咯, 就是一个判断滚动条是否到达浏览器底部了. 如果到了就触发事件,米到就不处理. 计算公式提简单的 底部等于(0) = 滚动条高度 - 滚动条顶部距离 - 可视高度. 反正结 ...
- axios+Vue上传文件显示进度
一,前言 最近在用Vue,然后上传文件时需要显示进度,于是网上搜了一下,经过自己实测终于也弄明白了 二,效果 三,代码 HTML代码 <div id="app"> &l ...