萌新刚学st表两天半,求助
查看原帖
萌新刚学st表两天半,求助
561949
syr1125楼主2023/6/13 21:14
#include <bits/stdc++.h>
using namespace std;

const int M = 2e5 + 5, K = 25;
int f[M][K], a[M], n, m;

void init()
{
	for (int i = 1; i <= m; i ++) f[i][0] = a[i];
	
	int k = log2(m);
	for (int j = 1; j <= k; j ++)
	{
		for (int i = 1; i <= n - (1 << j) + 1; i ++)
		{
			f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
		}
	}
}

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

int main()
{
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= m; i ++)
	{
		scanf("%d", &a[i]);
	}
	init();
	
	int q;
	scanf("%d", &q);
	while (q --)
	{
		int x1, y1, x2, y2, k;
		scanf("%d %d %d %d %d", &x1, &y1, &x2, &y2, &k);
		if (abs(x2 - x1) % k || abs(y2 - y1) % k)
		{
			puts("NO");
			continue;
		}
		
		if (y1 > y2) swap(y1, y2);
		int t = (n - x1) / k * k + x1;
		if (query(y1, y2) >= t) puts("NO");
		else puts("YES");
	}
	return 0;
}

在第5个点WA了,把NO误判成YES

2023/6/13 21:14
加载中...