st查询算法模板题

(23条消息) RMQ算法_风流学霸段公子的博客-CSDN博客

1270. 数列区间最大值

输入一串数字,给你 M 个询问,每次询问就给你两个数字 X,Y,要求你说出 X 到 Y 这段区间内的最大数。

输入格式

第一行两个整数 N,M 表示数字的个数和要询问的次数;

接下来一行为 N 个数;

接下来 M 行,每行都有两个整数 X,Y。

输出格式

输出共 M 行,每行输出一个数。

数据范围

1≤N≤10^5,
1≤M≤10^6
1≤X≤Y≤N
数列中的数字均不超过2^31−1

输入样例:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
using namespace std;
typedef long long LL;
const int N = 1e5 + 5;
int n, m;
int num[N], dp[N][50];

int main() {
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		scanf("%d", &num[i]);
	}
	int k = log2(n);
	for (int i = 0; i < n; i++) {
		dp[i][0] = num[i];
	}
	for (int i = 1; 1 << i < n; i++) {
		for (int j = 0; j + (1 << i) <= n; j++) {
			dp[j][i] = max(dp[j][i - 1], dp[j + (1 << i - 1)][i - 1]);
		}
	}
	for (int i = 1,l,r; i <= m; i++) {
		scanf("%d%d", &l, &r);
		k = log2(r - l + 1);
		int ans = max(dp[l - 1][k], dp[r - (1 << k)][k]);
		cout << ans << endl;
	}
	return 0;
}
10 2
3 2 4 5 6 8 1 2 9 7
1 4
3 8
输出样例:
5
8

 从1开始的代码:
 

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
using namespace std;
typedef long long LL;
const int N = 1e5 + 5;
int n, m;
int num[N], dp[N][50];

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		scanf("%d", &num[i]);
	}
	int k = log2(n);
	for (int i = 1; i <= n; i++) {
		dp[i][0] = num[i];
	}
	for (int i = 1; 1 << i <= n; i++) {
		for (int j = 1; j + (1 << i)-1 <= n; j++) {// 这之所以是 (1 << i)-1是因为这是个左闭右开区间
			dp[j][i] = max(dp[j][i - 1], dp[j + (1 <<i-1)][i - 1]);
		}
	}
	for (int i = 1,l,r; i <= m; i++) {
		scanf("%d%d", &l, &r);
		k =(int)log2(r - l + 1);
		int ans = max(dp[l][k], dp[r - (1 << k)+1][k]);
		cout << ans << endl;
	}
	return 0;
}

posted @   Landnig_on_Mars  阅读(8)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示