诡异的问题,在线求调
  • 板块P1531 I Hate It
  • 楼主Mark_M
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/1/18 21:09
  • 上次更新2023/10/24 03:40:47
查看原帖
诡异的问题,在线求调
365433
Mark_M楼主2023/1/18 21:09

我测试样例过了,但全WA...

而且,当我下载第一组数据后进行测试,发现贼长的数据(2万多个) 只输入了7百多个初始化的数值。

我在测了几个短的数据(自己输入)并调试,未发现问题。

突然感jio好诡异...

#include <iostream>
#define N 200005
using namespace std;
int n, m;
int a[N], g[N * 4];

inline int lc(int p) {
	return p << 1;
}

inline int rc(int p) {
	return p << 1 | 1;
}

void PushUp(int p) {
	g[p] = max(g[lc(p)], g[rc(p)]);
}

void Build(int p, int l, int r) {
	if (l == r) {
		g[p] = a[l];
		return;
	}
	int mid = (l + r) >> 1;
	Build(lc(p), l, mid);
	Build(rc(p), mid + 1, r);
	PushUp(p);
}

int query(int p, int l, int r, int ql, int qr) {
	if (ql <= l && qr >= r) {
		return g[p];
	}
	int mid = (l + r) >> 1;
	int x;
	if (ql <= mid) {
		x = max(x, query(lc(p), l, mid, ql, qr));
	}
	if (qr >= mid + 1) {
		x = max(x, query(rc(p), mid + 1, r, ql, qr));
	}
	return x;
}

void AddNew(int p, int l, int r, int id, int t) {
	if (l == r) {
		g[p] = max(g[p], t);
		return;
	}
	int mid = (l + r) >> 1;
	if (id <= mid) {
		AddNew(lc(p), l, mid, id, t);
	}
	else if (id > mid) {
		AddNew(rc(p), mid + 1, r, id, t);
	}
	PushUp(p);
}

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	Build(1, 1, n);
	char c;
	while (m--) {
		cin >> c;
		int a, b;
		if (c == 'Q') {
			cin >> a >> b;
			int ans=query(1, 1, n, a, b);
			cout << ans << endl;
		}
		else if (c == 'U') {
			cin >> a >> b;
			AddNew(1, 1, n, a, b);
		}
	}
	return 0;
}
2023/1/18 21:09
加载中...