蒟蒻 8 分,求助
查看原帖
蒟蒻 8 分,求助
394729
Weight_of_the_Soul楼主2021/8/15 12:11
#include <cstdio>
#include <cmath>
#include <algorithm>
#define N 100005
using namespace std;

int n, m;
int mx[N][21];

int query(int l, int r) {
	int k = log2(r - l + 1);
	return max(mx[l][k], mx[r-(1<<k)+1][k]);
}

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

void inp() {
	n = read(), m = read();
	for(int i=1; i<=n; i++) {
		mx[i][0] = read();
	}
}

void work() {
	for(int j=1; j<=21; j++) {
		for(int i=1; i+(1<<j)-1<=n; i++) {
			mx[i][j] = max(mx[i][j-1], mx[i+(1<<(j-1))][j-1]);
		}
	}
	for(int i=1; i<=m; i++) {
		int l = read(), r = read();
		printf("%d\n", query(l, r));
	}
}

int main() {
	inp();
	work();
	return 0;
}
2021/8/15 12:11
加载中...