修改:两边暴力重构,中间打标记。复杂度: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. elasticsearch 5.x 系列之六 文档索引,更新,查询,删除流程

    一.elasticsearch index 索引流程 步骤: 客户端向Node1 发送索引文档请求 Node1 根据文档ID(_id字段)计算出该文档应该属于shard0,然后请求路由到Node3的P ...

  2. git初始化仓库相关

    当我们需要新建一个git项目会遇到的问题 全局设置 git config --global user.name "名字" git config --global user.emai ...

  3. 【转载】[Elasticsearch]ES入门

    传送门:http://www.cnblogs.com/xing901022 ES即简单又复杂,你可以快速的实现全文检索,又需要了解复杂的REST API.本篇就通过一些简单的搜索命令,帮助你理解ES的 ...

  4. 7.Mongodb复制(副本集)

    1.复制 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据备份 数据灾难恢复 ...

  5. LeetCode题目解答

    LeetCode题目解答——Easy部分 Posted on 2014 年 11 月 3 日 by 四火 [Updated on 9/22/2017] 如今回头看来,里面很多做法都不是最佳的,有的从复 ...

  6. Qt的index 用方法static_cast<CTableItem*>(index.internalPointer())取出来的值的成员都未初始化

    mediaData = 0x01046380 {m_Deviceid={...} m_Title={...} m_Type={...} ...} 里面是这样的值,内存已经释放,但是没有remove:

  7. 【IOI 2002/FJOI2019】任务安排(超级计算机)

    题目 \(N\) 个任务排成一个序列在一台机器上等待完成(顺序不得改变),这 \(N\) 个任务被分成若干批,每批包含相邻的若干任务.从时刻 \(0\) 开始,这些任务被分批加工,第 \(i\) 个任 ...

  8. 第二篇 Postman的高阶使用之配置全局变量及局部变量的调用及设置方法(手动方法)

    第五篇主要写了关于postman的基本使用,重点是如果发送json请求,为什么要将发送json请求呢, 一是目前大多数的请求已经倾向于发送json格式,二是本人太懒了,不想一个字段一个字段的添加到参数 ...

  9. vue路由文档笔记

    引入router this.$router 和 router 使用起来完全一样.我们使用 this.$router 的原因是我们并不想在每个独立需要封装路由的组件中都导入路由 可以在任何组件内通过 t ...

  10. ECharts 上传图片Example

    前端 1.为ECharts准备一个div <div id="main" style="Height:400px"></div> 2.引入 ...