ST表

Luogu - P3865 【模板】ST表

//Luogu P3865 ST表
#include
#define N 100005
#define M 17
using namespace std;
int n, m, a, l, r;
int st[N][M];
int lg2[N];
int main() {
     
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; ++i) {
     
		scanf("%d", &a);
		st[i][0] = a;
	}
	for(int i = 2; i <= n; ++i) {
     
		lg2[i] = lg2[i / 2] + 1;
	}
	for(int i = 1; i < M; ++i) {
     
		for(int j = 1; j + (1 << i) - 1 <= n; ++j) {
     
			st[j][i] = max(st[j][i - 1], st[j + (1 << (i - 1))][i - 1]);
		}
	}
	for(int i = 0; i < m; ++i) {
     
		scanf("%d%d", &l, &r);
		int s = lg2[r - l + 1];
		printf("%d\n", max(st[l][s], st[r - (1 << s) + 1][s]));
	}
	return 0;
}

你可能感兴趣的:(算法,数据结构,算法,数据结构,c语言,ST表)