c++之路进阶——bzoj3343(教主的魔法)

| F.A.Qs | Home | Discuss | ProblemSet | Status | Ranklist | Contest | ModifyUser gryz2016 | Logout | 捐赠本站 |
|---|
3343: 教主的魔法
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 711 Solved: 309
[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
Source
题解:
个人用块状链表写的,
对于首尾块用暴力更新,中间的加add标志。
第一次提交超时,很奇怪,然后发现循环套快排了,我去,坑了我2h。。。
代码:
#include<cstdio>
#include<cmath>
#include<algorithm>
#define maxn 1000010
#define logmaxn 100010 using namespace std; int a[maxn],up[logmaxn],belong[maxn],l[logmaxn],r[logmaxn],b[maxn],sum;
int n,m,sqrp,gs,ans;
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%d",&a[i]);
sqrp=sqrt(n);
if (n%sqrp) gs=n/sqrp+;
else gs=n/sqrp;
for (int i=;i<=gs;i++)
l[i]=(i-)*sqrp+,r[i]=i*sqrp;
r[gs]=n;
for (int i=n;i>;i--)
belong[i]=(i-)/sqrp+;
for (int i=;i<=gs;i++)
{
for (int j=l[i];j<=r[i];j++)
b[j]=a[j];
sort(b+l[i],b+r[i]+);
}
for (int i=;i<=m;i++)
{
char ch[];
int ll,rr,x;
scanf("%s%d%d%d",ch,&ll,&rr,&x);
int lll=belong[ll];
int rrr=belong[rr];
switch(ch[])
{
case 'M':
if (lll==rrr)
{
for (int j=ll;j<=rr;j++)
a[j]=a[j]+x;
for (int j=l[lll];j<=r[lll];j++)
b[j]=a[j];
sort(b+l[lll],b+r[lll]+);
}
else
{
for (int j=ll;j<=r[lll];j++)
a[j]+=x;
for (int j=l[lll];j<=r[lll];j++)
b[j]=a[j];
sort(b+l[lll],b+r[lll]+);
for (int j=l[rrr];j<=rr;j++)
a[j]+=x;
for (int j=l[rrr];j<=r[rrr];j++)
b[j]=a[j];
sort(b+l[rrr],b+r[rrr]+);
for (int j=lll+;j<rrr;j++)
up[j]+=x;
}
break;
case 'A':
if (lll==rrr)
{
for (int j=ll;j<=rr;j++)
if (a[j]+up[lll]>=x) ans++;
}
else
{
for (int j=ll;j<=r[lll];j++)
if (a[j]+up[lll]>=x) ans++; for (int j=l[rrr];j<=rr;j++)
if (a[j]+up[rrr]>=x) ans++;
for (int j=lll+;j<=rrr-;j++)
{
sum=lower_bound(b+l[j],b+r[j]+,x-up[j])-b;
ans+=r[j]+-sum;
}
}
printf("%d\n",ans);
ans=;
break;
}
}
return ;
}
数据生成器:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<time.h>
using namespace std;
int main()
{ srand(time());
freopen("magic.txt","w",stdout);
int n=,q=;
cout<<n<<' '<<q<<endl;
for(int i=;i<=n;i++)
cout<<rand()%+<<endl;
cout<<endl;
for(int i=;i<=q;i++)
{
int f=rand()%;
int l=rand()%n+,r=rand()%n+;
if(r<l)swap(l,r);
if(f)cout<<'A'<<' '<<l<<' '<<r<<' '<<rand()%<<endl;
else cout<<'M'<<' '<<l<<' '<<r<<' '<<rand()%<<endl;
}
return ;
}
c++之路进阶——bzoj3343(教主的魔法)的更多相关文章
- [BZOJ3343]教主的魔法
[BZOJ3343]教主的魔法 试题描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.… ...
- BZOJ3343: 教主的魔法 分块
2016-05-28 10:27:19 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3343 比较显然的分块题,分块后块内排序,维护整块的附 ...
- 【分块】bzoj3343: 教主的魔法
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 631 Solved: 272[Submit][Status][Discuss ...
- bzoj千题计划154:bzoj3343: 教主的魔法
http://www.lydsy.com/JudgeOnline/problem.php?id=3343 high记录原始身高 HIGH记录每块排序之后的身高 不满一块的直接对high操作,重排之后再 ...
- bzoj3343: 教主的魔法 分块 标记
修改:两边暴力重构,中间打标记.复杂度:O(n0.5) 查询:中间二分两边暴力.O(n0.5logn0.5) 总时间复杂度O(n*n0.5logn0.5) 空间复杂度是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】教主的魔法 分块
[bzoj3343]教主的魔法 2014年4月26日8092 Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了 ...
随机推荐
- 蓝牙—服务发现协议(SDP)
服务搜索协议(SDP)提供了应用发现可用服务以及确定可用服务特点的方法.SDP发现协议提供下面的能力 <1>为客户提供搜索所需要服务的能力. <2>允许基于服务类型搜索服务 & ...
- 【Android测试】【第七节】Monkey——源码浅谈
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4713466.html 前言 根据上一篇我们学会了Monke ...
- Wordpress引入多说插件
多说为Wordpress制作了插件,按照以下步骤,快速让你的网站迅速使用多说! 1.下载插件:https://wordpress.org/plugins/duoshuo/ 或在WordPress后台“ ...
- Linux centos关机与重启命令详解与实战
Linux centos重启命令: 1.reboot 2.shutdown -r now 立刻重启(root用户使用) 3.shutdown -r 10 过10分钟自动重启(root用户使用) 4.s ...
- CS6破解
1) 序列号这里为大家生成了两个,可以通过软件验证:1325-0949-2080-9819-3777-32301325-0160-5283-9851-2671-8951 2) 破解补丁安装时会用到,请 ...
- undefined和void
1.undefined undefined在js中并不是关键字/保留字,因此在IE5.5~8中可以对undefined赋值,但是在IE9以上,对其赋值是无效的 <script> var a ...
- iis7.5应用程序池模板永久性缓存初始化失败解决方法
错误: 针对应用程序池的模板永久性缓存初始化失败,这是由以下错误导致的: 无法为应用程序池创建磁盘缓存子目录.数据可能包含其他错误代码. 解决办法如下: 网上搜索的答案全都是修改3个目录的权限,给II ...
- day01-基础内容
day01-基础内容 1.Linux: 1)开源的操作系统.免费的 主要用于服务器端,而Java主要是服务器端开发 2)Linux与Windows目录结构的区别: 2.1)文件系统不同 ...
- jQuery的dom操作(二)转
addClass() 向匹配的元素添加指定的类名. after() 在匹配的元素之后插入内容. append() 向匹配的元素内部追加内容. appendTo() 向匹配的元素内部追加内容. attr ...
- linux下如何启动/停止/重启mysql:
一.启动方式1.使用linux命令service 启动:service mysqld start2.使用 mysqld 脚本启动:/etc/inint.d/mysqld start3.使用 safe_ ...