求助86tps #11 # 12 RE
查看原帖
求助86tps #11 # 12 RE
1321184
wsthtk楼主2024/8/29 13:19

代码如下

数组特意开大了

#include <bits/stdc++.h>
using namespace std;

int n, q;
int f[1000010][30];

int log_2(int x) // ceil(log2(x))
{
	int res = 0;
	int y = 1;
	while (y < x)
	{
		y <<= 1;
		res++;
	}
	return res;
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> q;
	for (int i = 1; i <= n; i++)
	{
		cin >> f[i][0];
	}

	int lgn = log_2(n);
	for (int j = 1; j <= lgn; j++)
	{
		for (int i = 1; i + (1 << j) - 1 <= n; i++)
		{
			f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
		}
	}

	while (q--) // m次询问
	{
		int i, j;
		cin >> i >> j;
		int len = j - i + 1;
		int lgl = log_2(len) - 1;
		cout << max(f[i][lgl], f[j - (1 << lgl) + 1][lgl]) << '\n';
	}
	return 0;
}


2024/8/29 13:19
加载中...