[bzoj] 3343 教主的魔法 || 带修改分块
原题
长度为n的序列,有两种操作:
1、[l,r]区间每个数+w
2、询问[l,r]区间有多少个数>c
记录lazy数组即可。
#include<cstdio>
#include<algorithm>
#define N 1000010
#define B 1010
#define st(x) (((x)-1)*B+1)
#define ed(x) min((x)*B,n)
#define bel(x) (((x)-1)/B+1)
using namespace std;
int n,q,l,r,w,a[N],s[N],lz[N];
char b[3];
int read()
{
int ans=0,fu=1;
char j=getchar();
for (;j<'0' || j>'9';j=getchar()) if (j=='-') fu=-1;
for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
return ans*fu;
}
void push(int x)
{
if (!lz[x]) return ;
for (int i=st(x);i<=ed(x);i++)
s[i]+=lz[x],a[i]+=lz[x];
lz[x]=0;
}
void single_change(int l,int r,int w)
{
int b=bel(l);
push(b);
for (int i=l;i<=r;i++) a[i]+=w;
for (int i=st(b);i<=ed(b);i++) s[i]=a[i];
sort(s+st(b),s+ed(b)+1);
}
void change(int l,int r,int w)
{
if (bel(l)==bel(r)) return single_change(l,r,w);
for (int i=bel(l)+1;i<bel(r);i++)
lz[i]+=w;
single_change(l,ed(bel(l)),w);
single_change(st(bel(r)),r,w);
}
int block_query(int b,int w)
{
return s+ed(b)-upper_bound(s+st(b),s+ed(b)+1,w-lz[b]-1)+1;
}
int single_query(int l,int r,int w)
{
int b=bel(l),ret=0;
for (int i=l;i<=r;i++)
if (a[i]+lz[b]>=w) ret++;
return ret;
}
int query(int l,int r,int w)
{
if (bel(l)==bel(r)) return single_query(l,r,w);
int ret=0;
for (int i=bel(l)+1;i<bel(r);i++)
ret+=block_query(i,w);
return ret+single_query(l,ed(bel(l)),w)+single_query(st(bel(r)),r,w);
}
int main()
{
n=read();
q=read();
for (int i=1;i<=n;i++)
a[i]=s[i]=read();
for (int i=1;st(i)<=n;i++) sort(s+st(i),s+ed(i)+1);
while (q--)
{
scanf("%s",b);
l=read();
r=read();
w=read();
if (b[0]=='M') change(l,r,w);
else printf("%d\n",query(l,r,w));
}
return 0;
}
[bzoj] 3343 教主的魔法 || 带修改分块的更多相关文章
- BZOJ 3343: 教主的魔法(分块+二分查找)
BZOJ 3343: 教主的魔法(分块+二分查找) 3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: ...
- BZOJ 3343: 教主的魔法 [分块]【学习笔记】
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: 526[Submit][Status][Discus ...
- Bzoj 3343: 教主的魔法(分块+二分答案)
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MB Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息 ...
- Bzoj 3343: 教主的魔法 分块,二分
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 821 Solved: 364[Submit][Status][Discuss ...
- BZOJ 3343教主的魔法
Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的 ...
- bzoj 3343: 教主的魔法
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 924 Solved: 402[Submit][Status][Discuss] Descriptio ...
- BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法
http://www.lydsy.com/JudgeOnline/problem.php?id=3343 || https://www.luogu.org/problem/show?pid=280 ...
- bzoj 3343 教主的魔法 分块
修改直接对整块打标记,两边暴力. 查询需要保证每个整块有序,所以在修改时排序就好啦 #include<cstdio> #include<cstring> #include< ...
- BZOJ 3343 教主的魔法(分块)
题意: 有一个1e6的数组,t次操作:将[l,r]内的值增加w,或者查询[l,r]内的值大于等于add的 思路: 分块,块大小为sqrt(n),每次只需要暴力头尾两块,中间的整块打标记, 对于查询查操 ...
随机推荐
- flask实现基于elasticsearch的关键词搜索建议
1.实现效果 2.fuzzy模糊查询和suggest查询 fuzzy模糊查询 GET chaxun/job/_search { "query": { "fuzzy&quo ...
- spring-mybatis整合项目 异常处理2
org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'com/imooc ...
- Servlet学习笔记03——什么是DAO?
1.案例 (1)添加用户 step1.建表 create table t_user( id int primary key auto_increment, username varchar(50) u ...
- HTML+CSS : 笔记整理(3 移动端布局简单了解)
流体布局:宽度用百分比,计算真实宽度用函数 : width: calc(25% - 4px); box-sizing: 1.content-box:默认计算方式 ,宽度和高度分别应用到元素的内容框.在 ...
- thymelef模板报错 the entity name must immediately follow the '&' in the entity reference
thymelef模板里面是不能实用&符号的 要用&转义符代替,官网也有文档说明可以用官方的通配符代替,官方文档http://www.thymeleaf.org/doc/tutorial ...
- 小明的存钱计划 南阳acm54
小明的存钱计划 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 小明的零花钱一直都是自己管理.每个月的月初妈妈给小明300元钱,小明会预算这个月的花销,并且总能做到实际花 ...
- 裸机——210SD卡启动
1.通过阅读iROM_Application_note可以获取关于启动的全部信息 2.记录下代码 制作SD卡启动的代码,即添加校验和的 #include <strings.h> #incl ...
- 使用perl发邮件
如果你使用的是 window 系统,没有 sendmail 工具.这时你就可以使用 perl 的 MIME:Lite 模块作为邮件客户端来发送邮件. 这里我们直接用 cpan 来安装(需要 root ...
- 15.3,redis持久化RDB与AOF
redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持久化 ...
- 阿里巴巴Java开发规约Eclipse插件安装及使用
技术交流群:233513714 插件安装 环境:JDK1.8,Eclipse4+.有同学遇到过这样的情况,安装插件重启后,发现没有对应的菜单项,从日志上也看不到相关的异常信息,最后把JDK从1.6升级 ...