有没有用ST表过这道题的方法
查看原帖
有没有用ST表过这道题的方法
540226
fengziyi楼主2022/8/3 11:18

rt,本地st表空间177MB,有没有能卡过去的

#include <bits/stdc++.h>
#define qwq printf("fzy_qwq\n");
#define reg register
#define _read =read()
using namespace std;
int n, m, l, r, k;
int st[2000001][21];
inline int read()
{
	int x = 0, sgn = 1; char ch = getchar();
	while (ch < '0' || ch > '9') { if (ch == '-') sgn = -1; ch = getchar(); }
	while (ch >= '0' && ch <= '9') { x = (x << 3) + (x << 1) + (ch & 15); ch = getchar(); }
	return x * sgn;
}
int main()
{
	n _read; m _read;
	for (reg int i = 1; i <= n; i++)
		st[i][0] _read;
	for (reg int j = 1; j < 21; j++)
		for (reg int i = 1; i + (1 << j) - 1 <= n; i++)
			st[i][j] = min(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
	for (reg int i = 1; i <= n; i++)
	{
		if (i == 1) { printf("0\n"); continue; }
		l = max(1, i - m); r = i - 1;
		k = log2(r - l + 1);
		printf("%d\n", min(st[l][k], st[r - (1 << k) + 1][k]));
	}

	return 0;
}
2022/8/3 11:18
加载中...