【分块】bzoj3343: 教主的魔法
3343: 教主的魔法
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 631 Solved: 272
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 3 4 5
A 1 5 4
M 3 5 1
A 1 5 4
Sample Output
3
HINT
新开一个数组b
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath> #define maxn 1000001 using namespace std; int n,a[maxn],team[maxn],b[maxn],str[maxn],end[maxn],tag[]; inline int in()
{
int x=;char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch<=''&&ch>='')x=x*+ch-'',ch=getchar();
return x;
} void pre()
{
int T=sqrt(n),cnt;
for(int i=;i<=n;i++)
team[i]=(i-)/T+;
cnt=team[n];
for(int i=;i<=n;i++)end[team[i]]=i,b[i]=a[i];
for(int i=n;i>=;i--)str[team[i]]=i;
for(int i=;i<=cnt;i++)
sort(str[i]+b,b+end[i]+);
} void add(int l,int r,int c)
{
if(team[l]==team[r]){
for(int i=l;i<=r;i++)a[i]+=c;
for(int i=str[team[l]];i<=end[team[r]];i++)b[i]=a[i];
sort(str[team[l]]+b,end[team[l]]+b);
return;
}
for(int i=l;i<=end[team[l]];i++)
a[i]+=c;
for(int j=str[team[r]];j<=r;j++)
a[j]+=c;
for(int i=str[team[l]];i<=end[team[l]];i++)b[i]=a[i];
for(int i=str[team[r]];i<=end[team[r]];i++)b[i]=a[i];
sort(str[team[l]]+b,end[team[l]]+b+);
sort(str[team[r]]+b,end[team[r]]+b+);
for(int i=team[l]+;i<=team[r]-;i++)
tag[i]+=c;
} int binary_search(int pos,int c)
{
int l=str[pos],r=end[pos];
if(b[r]<c)return r+;
while(l<=r)
{
int mid=(l+r)>>;
if(b[mid]<c)l=mid+;
else r=mid-;
}
return l;
} int query(int l,int r,int c)
{
int ans=;
if(team[l]==team[r]){
for(int i=l;i<=r;i++)if(a[i]+tag[team[l]]>=c)ans++;
return ans;
}
for(int i=l;i<=end[team[l]];i++)
if(a[i]+tag[team[l]]>=c)ans++;
for(int j=str[team[r]];j<=r;j++)
if(a[j]+tag[team[r]]>=c)ans++;
for(int i=team[l]+;i<=team[r]-;i++)
ans+=end[i]-binary_search(i,c-tag[i])+;
return ans;
} int main()
{
int q,u,v,c;
char sb;
n=in();q=in();
for(int i=;i<=n;i++)a[i]=in();
pre();
for(int i=;i<=q;i++)
{
sb=;
while(sb!='A'&&sb!='M')sb=getchar();
u=in(),v=in(),c=in();
if(sb=='A')printf("%d\n",query(u,v,c));
else add(u,v,c);
}
return ;
}
【分块】bzoj3343: 教主的魔法的更多相关文章
- [BZOJ3343]教主的魔法
[BZOJ3343]教主的魔法 试题描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.… ...
- BZOJ3343: 教主的魔法 分块
2016-05-28 10:27:19 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3343 比较显然的分块题,分块后块内排序,维护整块的附 ...
- 【分块】教主的魔法 @洛谷P2801/upcexam3138
时间限制: 1 Sec 内存限制: 128 MB 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列, ...
- [bzoj3343]教主的魔法——分块
Brief description 给定一个数列,您需要支持一下两种操作: 给[l,r]同加一个数 询问[l,r]中有多少数字大于或等于v Algorithm analyse 这个题一时想不到什么有效 ...
- bzoj3343 教主的魔法【分块入门】By cellur925
题意:维护一个数列,给出维护区间加法,询问区间内大于等于某个值的元素个数. 算法:分块.因为本题第二问显然可以用二分的思想,但是这貌似并不符合区间可加性,线段树好像就不好用了呢.所以本蒟蒻学习了分块. ...
- BZOJ-3343教主的魔法+分块(大块排序二分)
传送门:https://www.luogu.org/problemnew/show/P2801 参考:http://hzwer.com/2784.html 感觉思路无比清晰:) ps:我在洛谷A的, ...
- bzoj3343: 教主的魔法 分块 标记
修改:两边暴力重构,中间打标记.复杂度:O(n0.5) 查询:中间二分两边暴力.O(n0.5logn0.5) 总时间复杂度O(n*n0.5logn0.5) 空间复杂度是n级别的 标记不用下传因为标记不 ...
- bzoj千题计划154:bzoj3343: 教主的魔法
http://www.lydsy.com/JudgeOnline/problem.php?id=3343 high记录原始身高 HIGH记录每块排序之后的身高 不满一块的直接对high操作,重排之后再 ...
- 【BZOJ-3343】教主的魔法 分块
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 950 Solved: 414[Submit][Status][Discuss ...
随机推荐
- Linux 命令 - cd: 切换工作目录
命令格式 cd [directory] 实例 a) 将工作目录切换成主目录. cd # 或 cd ~ b) 将工作目录切换成当前工作目录的父目录. cd .. c) 将工作目录切换成上一个的工作目录. ...
- Linux 命令 - ping: 向网络主机发送 ICMP ECHO_REQUEST 包
ping 命令会向指定的网络主机发送特殊网络数据报 IMCP ECHO_REQUEST.多数网络设备收到该数据包后会做出回应,通过此法即可验证网络连接是否正常. 有时从安全角度出发,通常会配置部分网络 ...
- HTML5的Web SQL Database
本文将介绍 Web SQL Database 规范中定义的三个核心方法: openDatabase:这个方法使用现有数据库或新建数据库来创建数据库对象 transaction:这个方法允许我们根据情况 ...
- Tab 防刷新
今天发现项目中有个小毛病,就是tab老是刷新,就上网Copy了一份防止刷新的Tab例子,谢咯. 贴上来参考一下: <!DOCTYPE html PUBLIC "-//W3C//DTD ...
- browserify.js 的模块加载
browserify的模块加载基本上和nodejs的类似: nodejs 的模块加载是依次去读取文件然后用一个类eval() 函数执行并返回module.exports的结果.为了避免循环加载,在加载 ...
- ZStack之ZDApp_Init解析
[注:本文源自博客园http://www.cnblogs.com/cherishui/,为尊重劳动者成果,如需转载请保留此行] 以下代码分析基于ZStack-CC2530-2.5.1a,开发环境为 I ...
- POJ 3928 Ping pong
题目链接:http://poj.org/problem?id=3928 乒乓比赛,有N个人参加,输入每个玩家的技能等级,对每个人设置一个特定ID和一个技能值,一场比赛需要两个选手和一个裁判,只有当裁判 ...
- ubuntu启动慢
http://blog.sina.com.cn/s/blog_4cc9ffbc0100rxhh.html 参考 笔记本装的是ubuntu12.04,最近发现开机启动特别慢,至少3分钟,总担心系统会启动 ...
- 分享一个很好用的 日期选择控件datepicker 使用方法分享
很多同学在做网站的时候,有时候需要用户选择日期,年月日这些的,以前我也在用一个,但是那个的界面都不太好看,于是找啊找,找啊找,找到一个好东西,就是这个,datepicker,是jquery.ui里面的 ...
- mac安装memcache
1.wget http://blog.s135.com/soft/linux/nginx_php/memcache/memcache-2.2.5.tgz 2.tar zxvf memcache-2.2 ...