求助0分
查看原帖
求助0分
1046598
lukepanpyz楼主2024/9/1 17:32

代码:

#include <bits/stdc++.h>
using namespace std;
int f[1000005][25];
int main()
{
	int n,m;
	cin >> n >> m;
	for(int i = 1;i <= n;i++)
	{
		cin >> f[i][0];
	}
	int lc = int(log(double(n)) / log(2.0));
	for(int j = 1;j <= lc;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]);
//			printf("f[%d][%d] = %d\n",i,j,f[i][j]);
		}
	}
	for(int i = 1;i <= m;i++)
	{
		int l,r;
		cin >> l >> r;
		int p = int(log(double(r - l + 1)) / log(2.0));
		cout << max(f[l][p],f[r - (1 << p) + 1][p]) << endl;
	}
	return 0;
}
2024/9/1 17:32
加载中...