Luogu_P2880 Balanced Lineup G

本文介绍了一种使用ST表解决区间最值查询(RMQ)问题的方法,通过预处理数组来快速获取区间内的最大值和最小值,适用于高度差不大且查询频繁的问题场景。

Balanced Lineup G

链接

Luogu_P2880 Balanced Lineup G

题目描述

For the daily milking, Farmer John’s N N N cows ( 1 ≤ N ≤ 50 , 000 ) (1 ≤ N ≤ 50,000) (1N50,000) always line up in the same order. One day Farmer John decides to organize a game of Ultimate Frisbee with some of the cows. To keep things simple, he will take a contiguous range of cows from the milking lineup to play the game. However, for all the cows to have fun they should not differ too much in height.

Farmer John has made a list of Q Q Q ( 1 ≤ Q ≤ 180 , 000 ) (1 ≤ Q ≤ 180,000) (1Q180,000) potential groups of cows and their heights ( 1 ≤ h e i g h t ≤ 1 , 000 , 000 ) (1 ≤ height ≤ 1,000,000) (1height1,000,000). For each group, he wants your help to determine the difference in height between the shortest and the tallest cow in the group.

每天,农夫 John 的 n n n ( 1 ≤ n ≤ 5 × 1 0 4 ) (1 \le n \le 5 \times 10^4) (1n5×104)头牛总是按同一序列排队。

有一天, John 决定让一些牛们玩一场飞盘比赛。他准备找一群在对列中为置连续的牛来进行比赛。但是为了避免水平悬殊,牛的身高不应该相差太大。John 准备了 q q q ( 1 ≤ q ≤ 1.8 × 1 0 5 ) (1\le q \le 1.8 \times 10^5) (1q1.8×105)个可能的牛的选择和所有牛的身高 h i h_i hi ( 1 ≤ h i ≤ 1 0 6 , 1 ≤ i ≤ n ) (1 \le h_i \le 10^6,1 \le i \le n) (1hi106,1in)。他想知道每一组里面最高和最低的牛的身高差。

输入格式

Line 1 1 1: Two space-separated integers, N N N and Q Q Q.

Lines 2.. N + 1 2..N+1 2..N+1: Line i + 1 i+1 i+1 contains a single integer that is the height of cow i i i

Lines N + 2.. N + Q + 1 N+2..N+Q+1 N+2..N+Q+1: Two integers A A A and B B B ( 1 ≤ A ≤ B ≤ N ) (1 ≤ A ≤ B ≤ N) (1ABN), representing the range of cows from A A A to B B B inclusive.

第一行两个数 n , q n,q n,q

接下来 n n n 行,每行一个数 h i h_i hi

再接下来 q q q 行,每行两个整数 a a a b b b ,表示询问第 a a a 头牛到第 b b b 头牛里的最高和最低的牛的身高差。

输出格式

Lines 1.. Q 1..Q 1..Q: Each line contains a single integer that is a response to a reply and indicates the difference in height between the tallest and shortest cow in the range.

输出共 q q q 行,对于每一组询问,输出每一组中最高和最低的牛的身高差。

输入输出样例

输入 #1
6 3
1
7
3
4
2
5
1 5
4 6
2 2
输出 #1
6
3
0

思路

ST表、RMQ问题的模板题。

ST表:

  1. f i , j f_{i,j} fi,j表示以 i i i为起点的长度为 2 j 2^j 2j的区间的最大值(最小值等);
  2. 以最大值为例,我们有递推式: f i , j = { a i , 0 ( j = 0 ) m a x ( f i , j − 1 , f i + 2 j − 1 , j − 1 ) ( j > 0 ) f_{i,j}=\begin{cases}\\a_{i,0}(j=0) \\max(f_{i,j-1},f_{i+2^{j-1},j-1})(j>0) \end{cases} fi,j={ai,0(j=0)max(fi,j1,fi+2j1,j1)(j>0)
  3. 按照这样的方法构建出来的数组就是ST表
  4. 此算法的时间复杂度为 O ( n log ⁡ 2 n ) O(n \log_2 n) O(nlog2n)

RMQ问题:

  1. 查询某个数组区间最小值或区间最大值;
  2. 最大值、最小值无法像前缀和一样加减,所以要用到ST表;
  3. 设区间 [ l , r ] [l,r] [l,r]的长度为 l e n len len,则一定存在 k k k,满足 l e n 2 ⩽ 2 k < l e n \frac{len}{2}\leqslant 2^k<len 2len2k<len
  4. 此时,区间 [ l , r ] [l,r] [l,r]的最大值为 m i n ( f l , k , f r − 2 k + 1 , k ) min(f_{l,k},f_{r-2^k+1,k}) min(fl,k,fr2k+1,k)

注意边界问题。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1000000,K=20;
int f1[N+1][K+1],f2[N+1][K+1],h[N+1];
int get_min(int l,int r)
{
	int len,k;
	len=r-l+1;
	k=log2(len)/log2(2);
	return min(f1[l][k],f1[l+len-(1<<k)][k]);
}
int get_max(int l,int r)
{
	int len,k;
	len=r-l+1;
	k=log2(len)/log2(2);
	return max(f2[l][k],f2[l+len-(1<<k)][k]);
}
int main()
{
	int n,q,k,a,b;
	memset(f1,0x3f,sizeof(f1));
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&h[i]);
		f1[i][0]=f2[i][0]=h[i];
	}
	k=1;
	for(int j=1;j<=K;j++)
	{
		for(int i=1;i<=n;i++)
			if(i+k<=n)
			{
				f1[i][j]=min(f1[i][j-1],f1[i+k][j-1]);
				f2[i][j]=max(f2[i][j-1],f2[i+k][j-1]);
			}
		k*=2;
	}
	for(int i=1;i<=q;i++)
	{
		scanf("%d%d",&a,&b);
		printf("%d\n",get_max(a,b)-get_min(a,b));
	}
	return 0;
}
内容概要:本文系统梳理了2025年数学前沿领域的研究动态与发展趋势,涵盖代数几何、数论、微分几何、拓扑学、偏微分方程、数学物理等多个核心方向,并介绍了当前国际数学研究的三大主流趋势:代数几何与数论、分析与偏微分方程、几何拓扑与表示论。文中重点报道了青年数学家王虹成功证明三维挂谷猜想的重大突破,以及韦东奕在偏微分方程与几何分析方面的研究成果,展现了中国数学界的崛起态势。同时,文档还涉及数学基础研究、应用数学、数学教育、期刊评价体系及国际数学强国格局等内容,引用大量视频、文章和权威资源,呈现数学学科的全貌与发展前景。; 适合人群:具备一定数学基础的本科生、研究生及科研工作者,关注数学前沿发展的教师、科技爱好者以及从事人工智能、物理、工程等相关领域并需数学支撑的专业人士。; 使用场景及目标:①了解2025年数学领域的重要突破与研究热点,如挂谷猜想的证明、朗兰兹纲领、拓扑数据分析等;②把握数学各分支的前沿方向与交叉应用,服务于科研选题、学术规划或跨学科研究;③获取权威学习资源与经典文献推荐,辅助数学学习与教学实践。; 阅读建议:此文档为信息聚合型资料,建议结合所列视频、书籍和论文深入拓展学习,重点关注核心突破案例(如王虹、韦东奕)与主流研究方向的演进脉络,宜以批判性思维梳理知识体系,避免碎片化阅读。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值