ST 表模板求调
  • 板块学术版
  • 楼主zrc4889
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/2/1 10:53
  • 上次更新2023/10/24 02:16:00
查看原帖
ST 表模板求调
523217
zrc4889楼主2023/2/1 10:53

rt,蒟蒻刚学 ST qwq

#include <bits/stdc++.h>
using namespace std;
const int _ = 1e5;
int a[_];
int n;

struct ST_min {
	int f[(int)1e4][22];
	void init() {
		int k = log2(n);
		for (int i = 1; i <= n; i ++) f[i][0] = a[i];
		for (int j = 1; 1<<j <= n; j ++)
			for (int i = 1; i + (1 << j) - 1 <= n; i ++)
				f[i][j] = min(f[i][j - 1], f[i + (1 << j)][j - 1]);
	}
	int rmq(int l, int r) {
		int k = log2(r - l + 1);
		return min(f[l][k], f[r - (1 << k) + 1][k]);
	}
};
struct ST_max {
	int g[(int)1e4][22];
	void init() {
		int k = log2(n);
		for (int i = 1; i <= n; i ++) g[i][0] = a[i];
		for (int j = 1; 1<<j <= n; j ++)
			for (int i = 1; i + (1 << j) - 1 <= n; i ++)
				g[i][j] = max(g[i][j - 1], g[i + (1 << j)][j - 1]);
	}
	int rmq(int l, int r) {
		int k = log2(r - l + 1);
		return max(g[l][k], g[r - (1 << k) + 1][k]);
	}
};
signed main() {

	int T;
	cin >> n >> T;
	for(int i = 1; i <= n; i ++)
		cin >> a[i];

	ST_max tree1;
	tree1.init();

	while(T--) {
		int l, r;
		cin >> l >> r;
		cout << tree1.rmq(l, r) << endl;
	}

	return 0;
}
2023/2/1 10:53
加载中...