修改:两边暴力重构,中间打标记。复杂度:O(n0.5)

查询:中间二分两边暴力。O(n0.5logn0.5)

总时间复杂度O(n*n0.5logn0.5)

空间复杂度是n级别的

标记不用下传因为标记不用下传也没时间下传,如果在访问时下传就造成更棘手的不整块,如果累加式下传不好记录,所以就带着就行。

细节很多......

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define MAXN 1010000
using namespace std;
typedef long long LL;
LL a[MAXN],b[][],mark[],n,pos[MAXN],lon,t;
inline LL Min(LL x,LL y)
{
return x<y?x:y;
}
int comp(const int x,const int y)
{
return x>y;
}
inline void work1()
{
LL l,r,w;
scanf("%lld%lld%lld",&l,&r,&w);
LL z=pos[l]+,y=pos[r]-;
for(LL i=z;i<=y;i++)
mark[i]+=w;
LL zzh=(pos[l]*lon);
zzh=Min(zzh,r);
for(LL i=l;i<=zzh;i++) a[i]+=w;
zzh=pos[l]*lon;
zzh=Min(zzh,n);
memset(b[pos[r]],,sizeof(b[pos[r]]));
for(LL i=zzh-lon+;i<=zzh;i++) b[pos[l]][i%lon+]=a[i];
sort(b[pos[l]]+,b[pos[l]]+lon+);
if(pos[l]!=pos[r])
{
for(LL i=(pos[r]-)*lon+;i<=r;i++) a[i]+=w;
zzh=pos[r]*lon;
zzh=Min(zzh,n);
memset(b[pos[r]],,sizeof(b[pos[r]]));
for(LL i=(pos[r]-)*lon+;i<=zzh;i++) b[pos[r]][i%lon+]=a[i];
sort(b[pos[r]]+,b[pos[r]]+lon+);
}
}
inline LL Count(LL p,LL c)
{
LL ans=,l=,r=lon;
while(l<=r)
{
LL mid=(l+r)>>;
if(b[p][mid]+mark[p]<c)
l=mid+;
else
ans+=(r-mid+),r=mid-;
}
return ans;
}
inline void work2()
{
LL l,r,c,ans=;
scanf("%lld%lld%lld",&l,&r,&c);
LL z=pos[l]+,y=pos[r]-;
for(LL i=z;i<=y;i++)
ans+=Count(i,c);
LL zzh=(pos[l]*lon);
zzh=Min(zzh,r);
for(LL i=l;i<=zzh;i++)
if(a[i]+mark[pos[i]]>=c)
ans++;
if(pos[l]!=pos[r])
{
for(LL i=(pos[r]-)*lon+;i<=r;i++)
if(a[i]+mark[pos[i]]>=c)
ans++;
}
printf("%lld\n",ans);
}
int main()
{
scanf("%lld",&n);
LL Q;
scanf("%lld",&Q);
lon=(LL)sqrt(n+0.5);
for(LL i=;i<=n;i++)
{
scanf("%lld",&a[i]);
pos[i]=(i-)/lon+;
b[pos[i]][i%lon+]=a[i];
}
t=pos[n];
for(int i=;i<=t;i++)
sort(b[i]+,b[i]+lon+);
while(Q--)
{
char s[];
scanf("%s",s);
if(s[]=='M')work1();
else work2();
}
return ;
}

bzoj3343: 教主的魔法 分块 标记的更多相关文章

  1. BZOJ3343: 教主的魔法 分块

    2016-05-28  10:27:19 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3343 比较显然的分块题,分块后块内排序,维护整块的附 ...

  2. [bzoj3343]教主的魔法——分块

    Brief description 给定一个数列,您需要支持一下两种操作: 给[l,r]同加一个数 询问[l,r]中有多少数字大于或等于v Algorithm analyse 这个题一时想不到什么有效 ...

  3. BZOJ-3343教主的魔法+分块(大块排序二分)

    传送门:https://www.luogu.org/problemnew/show/P2801 参考:http://hzwer.com/2784.html  感觉思路无比清晰:) ps:我在洛谷A的, ...

  4. [BZOJ3343]教主的魔法

    [BZOJ3343]教主的魔法 试题描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.… ...

  5. BZOJ 3343: 教主的魔法(分块+二分查找)

    BZOJ 3343: 教主的魔法(分块+二分查找) 3343: 教主的魔法 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1172  Solved:  ...

  6. Luogu 2801 教主的魔法 | 分块模板题

    Luogu 2801 教主的魔法 | 分块模板题 我犯的错误: 有一处l打成了1,还看不出来-- 缩小块大小De完bug后忘了把块大小改回去就提交--还以为自己一定能A了-- #include < ...

  7. 【bzoj3343】教主的魔法 分块

    [bzoj3343]教主的魔法 2014年4月26日8092 Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了 ...

  8. 【BZOJ-3343】教主的魔法 分块

    3343: 教主的魔法 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 950  Solved: 414[Submit][Status][Discuss ...

  9. 【BZOJ3343】教主的魔法 分块+二分

    Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的 ...

随机推荐

  1. js实现监听浏览器窗口大小改变事件

    window.onresize = function(){   }

  2. 11个简单实用技巧--Java性能调优

    多数开发人员认为性能优化是个比较复杂的问题,需要大量的经验和知识.是的,这并不没有错.诚然,优化应用程序以获得最好的性能并不是一件容易的事情,但这并不意味着你在没有获得这些经验和知识之前就不能做任何事 ...

  3. mysql 筛选重复名称

    CREATE TABLE `blur_article` ( `id` ) NOT NULL, `name` ) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=In ...

  4. P1049 装箱问题

    装箱问题 题目描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30,每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使 ...

  5. Sql Server 游标概念与实例

    引言 先不讲游标的什么概念,看如下Sql Server2008 图例: 需求:两张表的O_ID是一一对应的,现在求将加薪的工资+原来的工资=现在的工资,也就是O_Salary=O_Salary+A_S ...

  6. C# 获取当前日期当年的周数

    这几天跨年,项目上遇到了一个周数计算的问题. 2016年的元旦是周五开始的,之前系统计算的是属于15年的第53个周,但是年份已经到了16年了. 公司要求从1月1号周五开始算作16年的第一个周,今天1月 ...

  7. 《python核心编程第二版》第3章习题

    3-1. 标识符.为什么 Python 中不需要变量名和变量类型声明? 答: 对象的类型和内存占用都是运行时确定的. 尽管代码被编译成字节码,Python 仍然是一种解释 型语言. 在创建也就是赋值时 ...

  8. Django数据模型--字段整理

    一.字段 1.CharField: 字段数据类型为字符串 2.IntegerField: 字段数据类型为整形 3.BooleanField: 布尔类型 4.NullBooleanField: 允许为空 ...

  9. 孤荷凌寒自学python第六十八天学习并实践beautifulsoup模块1

    孤荷凌寒自学python第六十八天学习并实践beautifulsoup模块1 (完整学习过程屏幕记录视频地址在文末) 感觉用requests获取到网页的html源代码后,更重要的工作其实是分析得到的内 ...

  10. Vue折腾记 - (3)写一个不大靠谱的typeahead组件

    Vue折腾记 - (3)写一个不大靠谱的typeahead组件 2017年07月20日 15:17:05 阅读数:691 前言 typeahead在网站中的应用很多..今天跟着我来写一个不大靠谱的ty ...