[bzoj3343]教主的魔法

FLUENT Meshing Watertight Geometry工作流入门 - 5 生成表面网格 我们学习在生成表面网格任务下的不同输入。讨论了局部尺寸控制与全局尺寸控制的影响。最后,讨论了如何改进表面网格,以实现好的体网格质量。 阅读详情

3343: 教主的魔法

Time Limit: 10 Sec   Memory Limit: 256 MB
Submit: 441   Solved: 198
[ Submit][ Status][ Discuss]

Description

教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N。
每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W。(虽然L=R时并不符合区间的书写规范,但我们可以认为是单独增加第L(R)个英雄的身高)
CYZ、光哥和ZJQ等人不信教主的邪,于是他们有时候会问WD闭区间 [L, R] 内有多少英雄身高大于等于C,以验证教主的魔法是否真的有效。
WD巨懒,于是他把这个回答的任务交给了你。
 

Input

       第1行为两个整数N、Q。Q为问题数与教主的施法数总和。
       第2行有N个正整数,第i个数代表第i个英雄的身高。
       第3到第Q+2行每行有一个操作:
(1)       若第一个字母为“M”,则紧接着有三个数字L、R、W。表示对闭区间 [L, R] 内所有英雄的身高加上W。
(2)       若第一个字母为“A”,则紧接着有三个数字L、R、C。询问闭区间 [L, R] 内有多少英雄的身高大于等于C。
 

Output

       对每个“A”询问输出一行,仅含一个整数,表示闭区间 [L, R] 内身高大于等于C的英雄数。
 

Sample Input

5 3
1 2 3 4 5
A 1 5 4
M 3 5 1
A 1 5 4

Sample Output

2
3

HINT

【输入输出样例说明】

原先5个英雄身高为1、2、3、4、5,此时[1, 5]间有2个英雄的身高大于等于4。教主施法后变为1、2、4、5、6,此时[1, 5]间有3个英雄的身高大于等于4。

 

【数据范围】

对30%的数据,N≤1000,Q≤1000。

对100%的数据,N≤1000000,Q≤3000,1≤W≤1000,1≤C≤1,000,000,000。

这个题是个难度适中的分块,和二分。

我们可以将输入的数分成sqrt(n)块,我们可以很容易的想到,当修改时可以对整块的直接加上修改的数,对于非整块的暴力修改。

查询的时候,对于分整块的也是暴力查询。但是麻烦的地方就是对于整块的我们怎样去查询。

开始我想到了去二分,但是二分的过程中每一次都需要相对一个块排一遍序,这样的话就会超时,那怎么办呢?

我们可以想到可以先在外面再开一个数组,记录对于每一个块已经排好序的数。然后在修改的时候我们只需要对那两个不完整的两个块分别进行两次排序就好了,这样最多进行4m次排序,就可以过了。

值得注意的一点是,在暴力查找的时候,我们不能只是单纯的对修改的原数列进行判断,因为这样我们会漏掉对整个快修改的标记,要利用这些标进行暴力。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#include<cmath>
int n,m,a[1000010]={0},len,N=1,block[1500]={0};
struct S{
	int va,No;
}b[1000010];
char ch;
bool cmpva(S x,S y){return x.va<y.va;}
bool cmpNo(S x,S y){return x.No<y.No;}
#define mid (l+r)/2
int The_dichotomy(int l,int r,int high)
{
	int ans=0;
	if(l==r) return l; 
	if(high<=b[mid].va) ans=The_dichotomy(l,mid,high);
	else ans=The_dichotomy(mid+1,r,high);  
	return ans;
}
int main()
{
	int i,j,x,y,z;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i){
		scanf("%d",&a[i]);
		b[i].va=a[i];b[i].No=i;
	}
	len=sqrt(n);
	while(1){
		N+=1;
		if(N*len>=n) break;
	}
	for(i=1;i<=N;++i)
	  sort(b+(i-1)*len+1,b+min(i*len+1,n+1),cmpva);
	while(m--){
		cin>>ch;
		scanf("%d%d%d",&x,&y,&z);
		int l,r,ll,rr;
		l=(x%len==0)?(x/len):(x/len+1);
		r=(y%len==0)?(y/len):(y/len+1);
		ll=len*(l-1)+1==x?l:l+1;
		rr=y%len==0?r:r-1;
		if(ch=='M'){
			if(ll<=rr){
				for(i=ll;i<=rr;++i) block[i]+=z;
				if(l<ll){
					sort(b+(l-1)*len+1,b+l*len+1,cmpNo);
					for(i=x;i<=l*len;++i) b[i].va+=z,a[i]+=z;
					sort(b+(l-1)*len+1,b+l*len+1,cmpva);
				}
				if(rr<r){
					sort(b+rr*len+1,b+min(r*len+1,n+1),cmpNo);
					for(i=rr*len+1;i<=y;++i) b[i].va+=z,a[i]+=z;				
					sort(b+rr*len+1,b+min(r*len+1,n+1),cmpva);					
				}
			}
			else{
				if(l==r){
					sort(b+(l-1)*len+1,b+min(l*len+1,n+1),cmpNo);
					for(i=x;i<=y;++i) b[i].va+=z,a[i]+=z;				
					sort(b+(l-1)*len+1,b+min(l*len+1,n+1),cmpva);
				}	
				else{
					sort(b+(l-1)*len+1,b+l*len+1,cmpNo);
					sort(b+(r-1)*len+1,b+min(r*len+1,n+1),cmpNo);
					for(i=x;i<=y;++i) b[i].va+=z,a[i]+=z;			
					sort(b+(l-1)*len+1,b+l*len+1,cmpva);
					sort(b+(r-1)*len+1,b+min(r*len+1,n+1),cmpva);
				} 
			}
		}
		else{
			int ans=0;
			if(ll<=rr){
				for(i=ll;i<=rr;++i){
					int left=(i-1)*len+1,right=min(i*len,n),high=z-block[i],number;
					if(b[left].va>=high){ans+=right-left+1;continue;}
					if(b[right].va<high) continue;
					number=The_dichotomy(left,right,high);
					ans+=right-number+1;
				}
				if(l<ll){
					int high=z-block[l];
				    for(i=x;i<=l*len;++i) 
					  ans+=a[i]>=high?1:0;
			    }
				if(r>rr){
					int high=z-block[r];
				    for(i=(r-1)*len+1;i<=y;++i) 
					  ans+=a[i]>=high?1:0;	
				}
			}
			else{
				int high;
				if(l==r){
					high=z-block[l];
					for(i=x;i<=y;++i) ans+=a[i]>=high?1:0;
				}
				else{
					high=z-block[l];
					for(i=x;i<=l*len;++i) ans+=a[i]>=high?1:0;
					high=z-block[r];
					for(i=(r-1)*len+1;i<=y;++i) ans+=a[i]>=high?1:0;
				}
			}
			printf("%d\n",ans);
		}
	}
}


视频理解与处理——OpenClaw视频能力深度解析(2026视频版) 本文介绍了OpenClaw视频理解与处理的核心技术,重点分析了视频预处理流程。通过VideoProcessor类实现视频加载、帧采样、尺寸调整和归一化等基础处理功能,支持本地和在线视频源处理,为后续视频分析任务提供标准化输入。预处理模块采用均匀采样和标准化方法优化视频数据,确保动作识别、场景分析等高级应用的准确性,展现了OpenClaw强大的视频处理能力。 阅读详情

相关推荐

Python XML 转 JSON,XML 转字典

今天我们将学习如何在 Python 中将 XML 转换为 JSON 和 XML 转换为字典。我们可以使用 Python 的xmltodict模块来读取 XML 文件并将其转换为字典或 JSON 数据。我们还可以在大型 XML 文件上进行流式处理,并将其转换为字典。在进入编码部分之前,让我们首先了解为什么需要进行 XML 转换。

rubys_的专栏 2501

【洛谷】P2801 教主的魔法

题目地址: https://www.luogu.com.cn/problem/P2801 题目描述: 教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是NNN个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1,2,…,N1, 2, \ldots, N1,2,…,N。每个人的身高一开始都是不超过100010001000100010001000的正整数。教主的魔法每次可以把闭区间[L,R][L, R][L,R](1≤L≤R≤N1≤L≤R≤N1≤L≤R≤N)内的英雄

数学、算法爱好者的博客 470

薛定谔 | 先导化合物优化与相互作用可视化

当获得针对某个靶点的先导分子后,想要在此基础上进行化学结构修饰。为了提升化学改造的成功率可以采用本教程方法进行结构虚拟改造/优化。每用薛定谔处理一个新任务,第一步必须创建新的project以方便日后管理。选项卡中修改工作路径(可以方便地找到输出文件)

药研猿的博客 2144

【洛谷 2801】教主的魔法

算法标签:分块

forever_dreams的博客 411

STM32H743玩转以太网:不用FreeRTOS,手把手搞定LAN8742和DHCP(附MPU配置避坑指南)

本文详细介绍了在STM32H743裸机环境下实现以太网通信的完整方案,重点讲解了LAN8742 PHY芯片的配置和DHCP自动获取IP的实现。通过CubeMX配置、内存布局优化和MPU设置,避开了H7系列常见的Cache陷阱,提供了无操作系统环境下的高效网络通信解决方案。

weixin_42709044的博客 201

PyTorch深度学习实战(25)——从零开始实现Mask R-CNN实例分割

Mask R-CNN 是一种在目标检测任务中引入了语义分割的强大框架,通过在 Faster R-CNN 基础上进行扩展,添加了额外的分支网络,不仅可以准确地检测对象的位置和类别,还可以生成每个实例的精确像素级别的语义分割掩码。其模块化的设计可以轻松地应用于不同的任务和数据集,并且可以通过添加更多的分支进行功能扩展,如实例关键点检测等。

盼小辉丶的博客 1万+

P2801 教主的魔法 Solution

洛谷 P2801 教主的魔法

pystraf的博客 884

2026华为OD面试题084:贪心的商人

商人经营一家店铺,有 `number` 种商品。由于仓库限制,每件商品的最大持有数量是 `item[index]`。 每种商品每天有一个价格 `item_price[item_index][day]`。通过对商品买进和卖出获取利润,请给出商人在 `days` 天内能获取到的最大利润。 注:同一件商品可以反复买进和卖出。 输入描述: - 第一行输入商品数量 `number` - 第二行输入商人售货天数 `days` - 第三行输入 `number` 个整数,表示每件商品的最大持有数量 `item[in

琅嬛福地 273

bzoj3343 教主的魔法

分块+二分

YHaX的博客 396

【RT-DETR涨点改进】全网独家-特征融合改进篇 | AAAI 2025 顶会| 高效涨点,RT-DETR利用CDFA对比度特征聚合模块,适用于目标检查(全网独家创新)

本文提出了一种基于CDFA模块的多级特征融合优化RT-DETR模型,用于解决医学图像分割中的软边界模糊、小目标和共现现象等问题。CDFA模块通过对比度特征聚合、局部特征增强和多级注意力机制,有效提升模型性能。研究提供了三种改进方案(rtdetr-r18/y50/l-CDFA),并在多个医学数据集上验证了其有效性。核心创新包括语义信息解耦、对比驱动特征融合和尺寸感知解码器。实验结果表明,该方法在分割精度和鲁棒性方面达到SOTA水平。

Ai缝合怪、助力小伙伴高效发论文 509

SAP 生产订单归档简介

通常在使用了几年的SAP后,系统中会产生非常多的数据在系统中,特别是制造业的生产订单,常年的累积会存在很多的订单在系统中,这个时候就可以使用归档的功能,对生产订单进行处理。标记DLFL的前提是需要完成生产订单的差异结算,DLFL标记可以清除掉生产订单的相关需求和预留。6、在执行CO78选择删除,前面的操作相当于我们把需要归档的数据写入了数据库中,现在正式进行数据的归档删除。然后我们co03在去看生产订单,可以看到生产订单中多了删除的状态和标记的状态。我这里直接执行的程序PPARCHP1,效果其实是一样的。

我小时候很黑的博客 2284

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

3343: 教主的魔法 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 446  Solved: 198 [Submit][Status][Discuss] Description 教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1

morestep的专栏 803

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【BZOJ3343】教主的魔法 分块

【BZOJ3343】教主的膜魔法 Description 教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N。 每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[L,R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W。(虽然L=R时并不...

aodanchui1057的博客 134

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

BZOJ_3343_教主的魔法_分块+二分查找

BZOJ_3343_教主的魔法_分块+二分查找 题意:教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列被编号为1、2、……、N。每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W。(虽然L=R时并不符合区间的书写规...

125

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

BZOJ 3343: 教主的魔法(分块+二分查找) 3343: 教主的魔法 Time Limit:10 SecMemory Limit:256 MBSubmit:1172Solved:526[Submit][Status][Discuss] 这个题目为什么不能用线段树做事因为C的值不固定,如果用线段树来做,那么每一个C值要从新建一遍线段树,时间会爆炸的 ...

weixin_30678349的博客 143

bzoj3343 教主的魔法 ( 分块 +二分)

bzoj3343 教主的魔法原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3343题意: 由不超过1000的正整数组成的序列,标号1,2,3…… N。教主的魔法 有m个询问或操作,每次操作可以把闭区间[L, R](1≤L≤R≤N)内的数全部加上一个整数W,每次询问闭区间 [L, R] 内有多少数大于等于C。 数据范围 N≤1000

Bfk的博客 424

BZOJ3343: 教主的魔法 分块

BZOJ3343: 教主的魔法 分块 2016-05-28 10:27:19 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3343 比较显然的分块题,分块后块内排序,维护整块的附加信息add 对于操...

anchoupi8353的博客 161

[BZOJ3343]教主的魔法

[BZOJ3343]教主的魔法 试题描述 教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N。 每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[L,R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W。(虽然L=R时并不符合区间的书写规范,但我们...

weixin_30716141的博客 75

【BZOJ 3343】教主的魔法

题目来源:BZOJ 3343 思路: 代码:

yhf_2015 273

【bzoj3343】教主的魔法

*题目描述: 教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N。 每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W。(虽然L=R时并不符合区间的书写规范,但我们可以认为是单独增...

diaopinshuo4087的博客 169

BZOJ 3343: 教主的魔法

3343: 教主的魔法 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3343 Description 教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N。每个人的身高一开始都是不超过1000的正整数...

148

bzoj 3343 教主的魔法

分块+打标记

我要吃熊猫 497

【bzoj3343 教主的魔法】

Description   教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N。  每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W。(虽然L=R时并不符合区间的书写规范,但我们可...

190
上一篇: 分块学习笔记
下一篇: [bzoj2298][HAOI2011]problem a
FZHvampire
博客等级 码龄12年 24粉丝 155原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值