求助ST表,WA #3
查看原帖
求助ST表,WA #3
297555
Zlc晨鑫楼主2022/11/1 22:05

RT,我也不知道哪里错了。

分类讨论是照着第二篇题解改的。

#include <array>
#include <cmath>
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 50010, INF = 2e9;

int f[N][30], g[N][30]; // max min
int n, q, m;
array<int, N> w;
vector<int> ys;

struct Data
{
	int year, val;
}d[N];

void init(const array<int, N> &w, int n)
{
	int t = log(n) / log(2) + 1;
	for (int i = 1; i <= n; i ++ ) f[i][0] = w[i];
	for (int j = 1; j <= t; j ++ )
		for (int i = 1; i <= n; i ++ )
			f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
}

int query(int l, int r)
{
	int t = log(r - l + 1) / log(2);
	return max(f[l][t], f[r - (1 << t) + 1][t]);
}

void init0(const array<int, N> &w, int n)
{
	int t = log(n) / log(2) + 1;
	for (int i = 1; i <= n; i ++ ) g[i][0] = w[i];
	for (int j = 1; j <= t; j ++ )
		for (int i = 1; i <= n; i ++ )
			g[i][j] = min(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
}

int query0(int l, int r)
{
	int t = log(r - l + 1) / log(2);
	return min(g[l][t], g[r - (1 << t) + 1][t]);
}

int get(int year)
{
	int l = 1, r = ys.size() - 1;
	while (l < r)
	{
		int mid = l + r + 1 >> 1;
		if (ys[mid] <= year) l = mid;
		else r = mid - 1;
	}
	return r;
}

bool check(int year)
{
	if (ys[get(year)] != year) return false;
	else return true;
}

int main()
{
	ys.push_back(INF);
	scanf("%d", &n);
	for (int i = 1; i <= n; i ++ ) 
	{
		scanf("%d%d", &d[i].year, &d[i].val);
		ys.push_back(d[i].year);
		w[ ++ m] = d[i].val;
	}

	init(w, m);
	init0(w, m);

	scanf("%d", &m);
	while (m -- )
	{
		int x, y;
		scanf("%d%d", &y, &x);
		bool a = check(y), b = check(x);
		// printf("%d %d\n", a, b);
		int l = get(y), r = get(x);
		l ++ ;
		if (b) r -- ;
		int v = l <= r ? query(l, r) : -INF;
		// printf("%d\n", v);
		if ((b && v >= w[get(x)]) || (a && v >= w[get(y)]) || (a && b && w[get(y)] < w[get(x)]))
			puts("false");
		else if (!a || !b || x - y != get(x) - get(y)) puts("maybe");
		else puts("true");
	}
	
	return 0;
}
2022/11/1 22:05
加载中...