求助,用了ST表但在最后两个测试点还是超时了
查看原帖
求助,用了ST表但在最后两个测试点还是超时了
683963
justurn楼主2022/3/22 16:39
#include <iostream>
#include<math.h>
#include <algorithm>
using namespace std;

const int logn = 20;
const int maxn = 100005;

int f[maxn][logn + 1];

inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}


int main() {
	int n = read();
	int m = read();
	for (int i = 1; i <= n; i++) {
		f[i][0] = read();
	}
	for (int j = 1; j <= logn; 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]);
		}
	}
	for (int i = 0; i < m; i++) {
		int x = read(), y = read();
		int k = log2(y - x + 1);
		cout << max(f[x][k], f[y - (1 << k) + 1][k]) << endl;
	}
}
2022/3/22 16:39
加载中...