首页 > 其他分享 >分块+ST的RMQ

分块+ST的RMQ

时间:2023-10-03 15:36:19浏览次数:27  
标签:RMQ 分块 int max ST bl blo br ans

期望\(O(n)-O(1)的RMQ\)

#include<bits/stdc++.h>
#define int long long
#define F(i0,i1,i2) for(int i0=(i1);i0<=(i2);++i0)
using namespace std;
inline int rd(){
	int x=0,f=0;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=1;ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return f?-x:x;
}
const int N=20000005,sN=4400,mod=1e9+7;

int a[N+sN+100],n,m,s;
int ans;
int blo,st[N/sN][sN+100],pre[N/sN][sN+100],suf[N/sN][sN+100],tot;
void build(){
	blo=sqrt(n);
	tot=(n-1)/blo;
	F(i,0,n-1){
		a[i]=read();
		st[i/blo][0]=max(st[i/blo][0],a[i]);
	}
	F(i,1,__lg(tot))
		for(int j=0;j+(1<<(i-1))<=tot;++j)st[j][i]=max(st[j][i-1],st[j+(1<<(i-1))][i-1]);
	F(i,0,tot){
		int st=i*blo;
		pre[i][0]=a[st];
		F(j,1,blo-1)pre[i][j]=max(pre[i][j-1],a[st+j]);
		suf[i][blo-1]=a[st+blo-1];
		for(int j=blo-2;j>=0;--j)suf[i][j]=max(suf[i][j+1],a[st+j]); 
	}
} 
int que(int l,int r){
	int bl=l/blo,br=r/blo;
	int ans=0;
	if(bl==br){
		F(i,l,r)ans=max(ans,a[i]);
		return ans;
	}
	ans=max(suf[bl][l%blo],pre[br][r%blo]);
	int len=__lg(br-bl-1);
	if(br-bl-1==0)return ans; 
	ans=max(ans,max(st[bl+1][len],st[br-(1<<len)][len]));
	return ans;
}
signed main(){

	return 0;
}

标签:RMQ,分块,int,max,ST,bl,blo,br,ans
From: https://www.cnblogs.com/ussumer/p/17741168.html

相关文章

  • testpmd
       estPMDTestPMD的本质是一个使用DPDK库实现的DPDKApplication,作用是在以太网端口之间转发数据包。通过TestPMD运行时的命令行,我们可用于配置端口(Port)之间的数据包转发和网卡(NetworkInterface)支持的其他功能。此外,我们还可以用TestPMD来尝试一些不同的驱动程序的......
  • 论文解读:HybridCR: weakly-supervised 3D point cloud semantic segmentation via hybr
    HybridCR:weakly-supervised3Dpointcloudsemanticsegmentationviahybridcontrastiveregularization基于混合对比学习正则化约束的增强方法,Li等人(2022a)使用极少标注(0.03%)在室内点云数据集上获得的分割精度为全监督方法的78.3%。是第一个利用点一致性并以端到端方式采用......
  • 【STM32基础 CubeMX】ADC的基础使用
    @TOC前言在嵌入式系统开发中,STM32系列微控制器是广泛应用的一种硬件平台,而STMicroelectronics提供的CubeMX工具则是一款强大的开发工具,能够显著简化STM32微控制器的配置和初始化过程。其中,ADC(模数转换器)是STM32微控制器中一个重要的外设,用于将模拟信号转换为数字信号。本文将介绍AD......
  • D. Strong Vertices
    D.StrongVertices条件转移一下即可由a[u]−a[v]≥b[u]−b[v],可得a[u]-b[u]>=a[v]-b[v]。设c[i]=a[i]-b[i],由题意得只要c[i]>=cj,点i就有指向j的路。因此题目就转化成:求c数组中最大元素的个数及其位置。点击查看代码#include<bits/stdc++.h>usingnamespacestd;#define......
  • Module build failed (from ./node_modules/css-loader/dist/cjs.js): CssSyntaxError
    问题描述在webpack的时候报错ERRORin./packages/theme-chalk/mixins/mixins.scss(./node_modules/css-loader/dist/cjs.js!./packages/theme-chalk/mixins/mixins.scss)Modulebuildfailed(from./node_modules/css-loader/dist/cjs.js):CssSyntaxError(14:8)......
  • spring boot 多数据源切换(dynamic-datasource-spring-boot-starter)
    官网 https://dynamic-datasource.com/guide/集成MybatisPlus https://dynamic-datasource.com/guide/integration/MybatisPlus.html#基础介绍自动读写分离 https://dynamic-datasource.com/guide/advance/Read-Write-Separation.html本地事物(不支持spring事务),使用@DSTransac......
  • mybatis出现错误 java lang NumberFormatException:For input string:A1
    使用mybatis,当使用map传参并且在iftest判断时使用map中所传的参数时,可能会产生如题的报错,具体报错信息见下图:分析这个错误,自己调试也找过度娘,“坚信”自己代码并没问题,但是问题始终无法解决。最后在一个帖子看到说iftest判断时,传入的参数跟匹配的值类型必须一致,于是调整了自己代......
  • 什么是 SAP ABAP 系统的 Transport Request
    在SAP系统中,TransportRequest(TR)是一个非常重要的组成部分,它是SAP系统中实施改变和确保这些改变能够从一个系统(例如开发系统)传输到另一个系统(例如测试或生产系统)的关键工具。简单来说,TransportRequest主要用于在SAP系统间迁移配置和开发对象。在SAP系统中,所有的配......
  • 什么是 Angular 14 的 strict typing of Angular Reactive Forms
    Angular14引入的"stricttypingofAngularReactiveForms"是一项强大的功能,它进一步提高了Angular应用程序的类型安全性和可维护性,特别是在处理表单时。这个功能使开发人员能够更精确地定义表单控件和表单模型的类型,从而减少了潜在的运行时错误,并提供了更好的代码提示和文......
  • 什么是企业级应用软件领域的 Strategic Customer
    StrategicCustomer(战略客户)是指那些对企业有重大影响的客户。这些客户的价值不仅仅体现在他们为企业带来的直接收益,更重要的是,他们能够对企业的战略发展产生重大影响。他们可能是企业的大客户,也可能是企业的重要合作伙伴。他们的需求、反馈和建议,都可能对企业的产品开发、市场战......