这题数据造的真好
查看原帖
这题数据造的真好
1013955
1234567890sjx楼主2024/1/15 08:38

O((n+m)log⁡n)O((n+m)\log n) 可以过。

#include <bits/stdc++.h>
using namespace std;
int f[20][100010], a[100010];
signed main() {
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		f[0][i] = a[i];
	}
	for (int i = 1; i < 20; i++) {
		for (int j = 1; j + (1 << i) - 1 <= n; j++) {
			f[i][j] = max(f[i - 1][j], f[i - 1][j + (1 << (i - 1))]);
		}
	}
	while (m--) {
		int l, r;
		scanf("%d%d", &l, &r);
		int len = r - l + 1, mx = 0;
		for (int i = 19; ~i; i--) {
			if (len >> i & 1) {
				mx = max(mx, f[i][l]);
				l += (1 << i);
			}
		}
		cout << mx << '\n';
	}
	return 0;
}
2024/1/15 08:38
加载中...