论述快读的重要性
查看原帖
论述快读的重要性
457103
nishishui楼主2022/8/28 13:08
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int read() {
	int res = 0;
	char ch;
	while ((ch = getchar()) < '0' || ch > '9');
	res = ch ^ 48;
	while ((ch = getchar()) >= '0' && ch <= '9') {
		res = (res >> 1) + (res >> 3) + ch - '0';
	}
	return res;
}

//int read() {
//	char ch;
//	int res = 0;
//	while ((ch = getchar()) < '0' || ch > '9');
//	res = ch ^ 48;
//	while ((ch = getchar()) >= '0' && ch <= '9') {
//		res = (res << 1) + (res << 3) + ch - '0';
//	}
//	return res;
//}
int stmax[100001][40];
int stmin[100001][40];
int a[100001];
int n, m, l, r;

//void st_create() {
//	int k = log2(n); // log(n)/log(2.0)
//	for (int j = 1; j <= k; j++) {
//		for (int i = 1; i <= n - (1 << j) + 1; i++) {
//			stmin[i][j] = min(stmin[i][j - 1], stmin[i + (1 << (j - 1))][j - 1]);
//			stmax[i][j] = max(stmax[i][j - 1], stmax[i + (1 << (j - 1))][j - 1]);
//		}
//	}
//}
void st_create() {
	int k = log2(n);
	for (int j = 1; j <= k; j++) {
		for (int i = 1; i <= n - (1 << j) + 1; i++) {
			stmax[i][j] = max(stmax[i][j - 1], stmax[i + (1 << (j - 1))][j - 1]);
			stmin[i][j] = min(stmin[i][j - 1], stmin[i + (1 << (j - 1))][j - 1]);
		}
	}
}



//int Quaryax(int l, int r) {
//	int k = log2(r - l + 1); // log(r - l + 1) / log(2.0)
//	return max(stmax[l][k], stmax[r - (1 << k) + 1][k]);
//}
//
//int Quaryin(int l, int r) {
//	int k = log2(r - l + 1); // log(r - l + 1) / log(2.0)
//	return min(stmin[l][k], stmin[r - (1 << k) + 1][k]);
//}
//
//int RMQ(int l, int r) {
//	return Quaryax(l, r) - Quaryin(l, r);
//}

int main() {
	n = read(), m = read();
	for (int i = 1; i <= n; i++) {
		a[i] = read();
		stmax[i][0] = a[i];
		stmin[i][0] = a[i];
	}
	st_create();
	while (m--) {
		l = read(), r = read();
		int k = log2(r - l + 1);
		int m1 = max(stmax[l][k], stmax[r - (1 << k) + 1][k]);
		int m2 = min(stmin[l][k], stmin[r - (1 << k) + 1][k]);
		printf("%d\n", m1 - m2);
		//	printf("%d\n", RMQ(l, r));
	}
	return 0;
}
2022/8/28 13:08
加载中...