后三个点TLE
查看原帖
后三个点TLE
1019317
zqhbxsgs楼主2024/1/24 08:58
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 800010;
long long n,m,a,l1,r1,dp[MAXN][25];
int rr(int l,int r) {
	int s = log2(r - l + 1);
	return max(dp[l][s],dp[r - (1<<s) + 1][s]);
}
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() {
	n = read(),m = read();
	for(int i = 1; i <= n; i ++) {
		dp[i][0] = read();
	}
	for(int i = 1; i <= 20; i ++) {
		for(int j = 1; j <= n; j ++) {
			dp[j][i] = max(dp[j][i - 1],dp[j + (1<<(i - 1))][i - 1]);
		}
	}
	for(int i = 1; i <= m; i ++) {
		l1 = read(),r1 = read();
		cout << rr(l1,r1) << endl;
	}
	return 0;
}

帮个忙优化一下

2024/1/24 08:58
加载中...