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个英雄们又一次聚集在了 ...
随机推荐
- spring容器IOC创建对象<三>
问题?Spring的DI讲解.DI有几种注入方式.一.spring的DI:依赖注入给属性赋值DI定义:一个对象类的属性可以使用springDI(依赖注入)来进行赋值,但是并不是所有的类属性都适合spr ...
- 《Haskell趣学指南 Learn You a Haskell for Great Good!》-代码实验
doubleMe x = x + x doubleUs x y = doubleMe x + doubleMe y doubleSmallNumber x = then x else x * doub ...
- ADO.NET中主要对象
ADO.NET是什么? ADO.NET是.Net平台提供和数据库交互的类库集,我们可以通过它对SQLSERVER,XML,Oracle等这样的数据源进行访问. 应用程序可以使用ADO.NET链接到数据 ...
- Insecure world writable dir /usr/local in PATH, mode 040777
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin14/rbconfi ...
- OrderSessionHelper查看订单在session是否存在的辅助类
1. package com.biotool.web.controller.helper; import org.apache.commons.lang3.StringUtils; import ja ...
- net异步线程注意事项
某人(不是我写的)写的异步代码:(还请博友们点评哈~) AsyncEventHandler[] asy = new AsyncEventHandler[ResultCount]; IAsyncRe ...
- Maven集成Sonar
Sonar对maven提供了简单可配的支持,要做的事情很简单--在maven/conf下settings.xml <profiles></profiles>标签之间添加如下内容 ...
- 读取、写入excel数据
在实际项目中,不可避免的会操作excel表格.一直以来都是读取excel表格,可今天为了写入excel表格,可是煞费苦心,终于完成,记录下来以便后续使用. 1.读取excel表格的数据 读取excel ...
- Chrome控制台调试工具用法
下面我们来看看console里面具体提供了哪些方法可以供我们平时调试时使用. Console API 当打开 firebug (也包括 Chrome 等浏览器的自带调试工具),window 下面会注册 ...
- Speed-BI云平台正在公测中,欢迎大家体验!
Speed-BI云平台正在公测中,欢迎大家体验.访问地址:http://speedbi.cn 支持IE(建议IE8以上),Edge,Chrome,Firefox,Safari等任意浏览器,以及采用这几 ...