【求助玄关】80pts WA #11 & 12
查看原帖
【求助玄关】80pts WA #11 & 12
794507
__0__楼主2024/9/9 20:08
#include <iostream>
using namespace std;

long long n, m;
long long l, r;

long long a[700005];
long long logs[700005];
long long ST[700005][10];

inline long long read()
{
	long long 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;
}

inline long long query(long long l, long long r) {
	long long lg = logs[r-l+1];
	
	return max(ST[l][lg], ST[r-(1<<lg)+1][lg]);
}

int main() {
	n = read();
	m = read();
	
	for (long long i = 1; i <= n; i++) {
		a[i] = read();
	}
	
	for (long long i = 2; i <= n+1; i++) {
		logs[i] = logs[i>>1]+1;
	}
	
	for (long long i = 1; i <= n; i++) {
		ST[i][0] = a[i];
	}
	
	for (long long j = 1; j <= logs[n]; j++) {
		for (long long i = 1; i <= n+(1<<j)+1; i++) {
			ST[i][j] = max(ST[i][j-1], ST[i+(1<<(j-1))][j-1]);
		}
	}
	
	while (m--) {
		l = read();
		r = read();
		
		cout << query(l, r) << '\n';
	}
	return 0;
}
2024/9/9 20:08
加载中...