bzoj 3343 教主的魔法 分块
修改直接对整块打标记,两边暴力。
查询需要保证每个整块有序,所以在修改时排序就好啦
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define N 1000005
using namespace std;
int n,m,nn,be[N],lazy[1005],ans;
int a[N],b[N];
void work(int x)
{
int l=(x-1)*nn+1,r=min(n,x*nn);
for(int i=l;i<=r;i++)
b[i]=a[i];
sort(b+l,b+r+1);
}
int main()
{
scanf("%d%d",&n,&m);
nn=(int)sqrt(n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
be[i]=(i-1)/nn+1;
}
int tot=be[n];
for(int i=1;i<=tot;i++)work(i);
char ch; int l,r,c,num;
while(m--)
{
ch=getchar();
while(ch!='A'&&ch!='M') ch=getchar();
scanf("%d%d%d",&l,&r,&c);
if(ch=='M'){
if(be[l]==be[r]){
for(int i=l;i<=r;i++) a[i]+=c;
work(be[l]);
continue;
}
for(int i=be[l]+1;i<be[r];i++) lazy[i]+=c;
for(int i=l;i<=be[l]*nn;i++) a[i]+=c;
for(int i=(be[r]-1)*nn+1;i<=r;i++) a[i]+=c;
work(be[l]); work(be[r]);
}
else{
int x; ans=0;
if(be[l]==be[r]){
for(int i=l;i<=r;i++)
if(a[i]+lazy[be[i]]>=c)
ans++;
printf("%d\n",ans);
continue;
}
for(int i=be[l]+1;i<be[r];i++){
x=c-lazy[i];
int L=(i-1)*nn+1,R=min(n,i*nn);
num=lower_bound(b+L,b+R+1,x)-b;
ans+=R-num+1;
}
for(int i=l;i<=be[l]*nn;i++)
if(a[i]+lazy[be[i]]>=c)
ans++;
for(int i=(be[r]-1)*nn+1;i<=r;i++)
if(a[i]+lazy[be[i]]>=c)
ans++;
printf("%d\n",ans);
}
}
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: 教主的魔法 || 洛谷—— P2801 教主的魔法
http://www.lydsy.com/JudgeOnline/problem.php?id=3343 || https://www.luogu.org/problem/show?pid=280 ...
- 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 教主的魔法(分块)
题意: 有一个1e6的数组,t次操作:将[l,r]内的值增加w,或者查询[l,r]内的值大于等于add的 思路: 分块,块大小为sqrt(n),每次只需要暴力头尾两块,中间的整块打标记, 对于查询查操 ...
- [bzoj] 3343 教主的魔法 || 带修改分块
原题 长度为n的序列,有两种操作: 1.[l,r]区间每个数+w 2.询问[l,r]区间有多少个数>c 记录lazy数组即可. #include<cstdio> #include&l ...
随机推荐
- box-sizing属性(指定针对元素的宽度与高度的计算方法)
在css中,使用width属性与height属性来指定元素的宽度与高度.使用box-sizing属性,可以指定用width属性与height属性分别指定的宽度值与高度值是否包含元素的内部补白区域与边框 ...
- Memcache架构新思考
2011年初Marc Kwiatkowski通过Memecache@Facebook介绍了Facebook的Memcache架构,现在重新审视这个架构,仍有很多方面在业界保持先进性.作为weibo内部 ...
- JavaScript中将对象数组中的某个属性值,批量替换成另一个数值
原文链接 https://segmentfault.com/q/1010000010352622 希望将下列数组中的sh替换成沪,sz替换成深 var stooges = [ {label:1,val ...
- SystemJS to Webpack – Before You Begin
http://angularfirst.com/systemjs-to-webpack-before-you-begin/ This is a primer discussing why to mov ...
- AngualrJS之服务器端通信
译自<AngularJS> 与服务器通信 目前,我们已经接触过下面要谈的主题的主要内容,这些内容包括你的Angular应用如何规划设计.不同的angularjs部件如何装配在一起并正常工作 ...
- C 实现基于角色的权限系统
本文demo下载地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1068 实例使用C# 实现基于角色的权限 ...
- Invoke-ASCmd 部署SSAS database
Install-Module -Name SqlServer -RequiredVersion 21.0.17099 -AllowClobberInvoke-ASCmd -Server 10.162. ...
- swagger在nginx下出现无法请求接口的问题
在Nginx配置绑定域名的时候,增加proxy_set_header即可 示例如下: server { listen ; server_name xxx.dev.internal.XXX.com; l ...
- RabbitMQ 安装 Your installed version of Erlang (6.2) is too old. Please install a more recent version.
windows安装RabbitMQ时在安装完Erlang语言开发包后,再安装RabbitMQ时报错: Your installed version of Erlang (6.2) is too old ...
- 老司机告诉你高质量的Java代码是怎么练成的?
一提起程序员,首先想到的一定是"码农",对,我们是高产量的优质"码农",我们拥有超跃常人的逻辑思维以及不走寻常路的分析.判别能力,当然,我们也有良好的编码规范, ...