TLE求助,感谢
查看原帖
TLE求助,感谢
1100140
Ryoo楼主2024/11/4 18:10
#include <bits/stdc++.h>
using namespace std;
int a[100005],f[100005][32],n,m,k[100005],ans[2000005];

inline int read() {
	int s = 0, w = 1;
	char chr = getchar();
	while(chr < '0' || chr > '9') {
		if(chr == '-') {
			w = -1;
			chr = getchar();
		}
	}
	while(chr >= '0' && chr <= '9') {
		s = (s<<1) + (s<<3) + (chr^48);
		chr = getchar();
	}
	return s;
}

void deal() {
	int t = log2(n);
	for(int i = 1; i <= n; i++) f[i][0] = a[i];
	for(int i = 1; i <= n; i++) k[i] = log2(i);
	for(int j = 1; j <= t; j++) {
		for(int i = 1; i <= n-(1<<j)+1; i++) {
			f[i][j] = max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
		}
	}
}
int st(int ll,int rr) {
	int tmp = k[rr-ll+1];
	return max(f[ll][tmp], f[rr-(1<<tmp)+1][tmp]);
}
int main() {
	n = read();m = read();
	for(int i = 1; i <= n; i++) a[i] = read();
	deal();
	for(int i = 1; i <= m; i++) {
		int l = read(),r = read();
		ans[i] = st(l,r);
	}
	for(int i = 1; i <= m; i++) printf("%d\n", ans[i]);
	return 0;
}
2024/11/4 18:10
加载中...